Forum » Programiranje » pygame problem
pygame problem
dejco_h ::
zdravo folk kaj mi lahko kdo pomaga....torej delam preprost "platformer game" in sen naletel na ta error: win.blit(self.sprite, (self.rect.x, self.rect.y))
AttributeError: 'Player' object has no attribute 'sprite' hvala vam za pomoč že vnaprej
AttributeError: 'Player' object has no attribute 'sprite' hvala vam za pomoč že vnaprej
import pygame import random import math import os from os import listdir from os.path import isfile,join pygame.init() pygame.display.set_caption("platformer game") WIDTH,HEIGTH=1000,800 BG_COLOR=(255,255,255) win=pygame.display.set_mode((WIDTH,HEIGTH)) def flip(sprites): return [pygame.transform.flip(sprite ,True,False) for sprite in sprites] def load_spite_sheets(dir1,dir2,width,heigth,direction=False): path = join("assets", dir1, dir2) images = [f for f in listdir(path) if isfile(join(path, f))] all_sprites = {} for image in images: sprite_sheet = pygame.image.load(join(path, image)).convert_alpha() sprites = [] for i in range(sprite_sheet.get_width() // width): surface = pygame.Surface((width, heigth), pygame.SRCALPHA, 32) rect = pygame.Rect(i * width, 0, width, heigth) surface.blit(sprite_sheet, (0, 0), rect) sprites.append(pygame.transform.scale2x(surface)) if direction: all_sprites[image.replace(".png", "") + "_right"] = sprites all_sprites[image.replace(".png", "") + "_left"] = flip(sprites) else: all_sprites[image.replace(".png", "")] = sprites return all_sprites def get_backGround(name): image=pygame.image.load(join("Assets","Background",name)) _,_,width,heigth=image.get_rect() tiles=[] for i in range(WIDTH//width+1): for j in range(HEIGTH//heigth+1): pos=(i*width,j*heigth) tiles.append(pos) return tiles,image PLAYER_VEL=5 FPS=60 class Player(pygame.sprite.Sprite): COLOR = (255, 0, 255) GRAVITY=1 SPRITES=load_spite_sheets("MainCharacters","PinkMan",32,32,True) ANIMATION_DELAY=5 def __init__(self,x,y,width,height): super().__init__() self.rect=pygame.Rect(x,y,width,height) self.x_vel=0 self.y_Vel=0 self.mask=None self.direction="left" self.animation_count=0 self.fall_count=0 def move(self,dx,dy): self.rect.x+=dx self.rect.y+=dy def move_left(self,vel): self.x_vel=-vel if self.direction!="left": self.direction="left" self.animation_count=0 def move_right(self,vel): self.x_vel=vel if self.direction!="right": self.direction="right" self.animation_count=0 def loop(self,fps): #self.y_Vel+=min(1,(self.fall_count/fps)*self.GRAVITY) self.move(self.x_vel,self.y_Vel) self.fall_count+=1 self.update_sprite() def draw(self, win): win.blit(self.sprite, (self.rect.x, self.rect.y)) def update_sprite(self): sprite_sheet="idle" if self.x_vel != 0: sprite_sheet = "run" sprite_sheet_name = sprite_sheet + "_" + self.direction sprites = self.SPRITES[sprite_sheet_name] sprite_index = (self.animation_count // self.ANIMATION_DELAY) % len(sprites) self.sprite = sprites[sprite_index] self.animation_count += 1 def handle_movement(player): keys=pygame.key.get_pressed() player.x_vel=0 if keys[pygame.K_LEFT]: player.move_left(PLAYER_VEL) if keys[pygame.K_RIGHT]: player.move_right(PLAYER_VEL) def draw(win,bckg,bg_image,player): for t in bckg: win.blit(bg_image,t) player.draw(win) pygame.display.update() def main(win): clock=pygame.time.Clock() bckg,bg_image=get_backGround("purple.png") player=Player(100,100,50,50) run=True while run: clock.tick(FPS) for event in pygame.event.get(): if event.type==pygame.QUIT: run=False break draw(win,bckg,bg_image,player) handle_movement(player) player.loop(FPS) pygame.quit() quit() if __name__=="__main__": main(win)
c23po ::
Funkcija player.loop se mora zgoditi pred funkcijo draw saj se objekt sprite inicializira v funkciji update_sprite, ki jo kličeš iz loop.
Računalniki nimajo spominov.
dejco_h ::
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
! | [Python] PovezaveOddelek: Programiranje | 45093 (1040) | d4vid |
» | Return ne deluje[python]Oddelek: Programiranje | 998 (862) | Jonatan |
» | Game Developer v SlovenijiOddelek: Programiranje | 3336 (1884) | shadeX |
» | Predstavitev dvojiškega drevesa z seznamomOddelek: Programiranje | 1987 (1587) | ktka |
» | Centriranje elementov menujaOddelek: Izdelava spletišč | 1674 (1499) | Jerry000 |