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 | |
| » | Return ne deluje[python]Oddelek: Programiranje | 1144 (1008) | Jonatan |
| » | Predstavitev dvojiškega drevesa z seznamomOddelek: Programiranje | 2148 (1748) | ktka |
| » | Centriranje elementov menujaOddelek: Izdelava spletišč | 1804 (1629) | Jerry000 |
| » | [c#] ukaz radirkaOddelek: Programiranje | 1252 (1045) | japol |
| » | python -slovarOddelek: Programiranje | 3356 (2335) | Valex86 |