gpt4 book ai didi

python - 如何修复 pygame 中的 Sprite 动画?

转载 作者:太空宇宙 更新时间:2023-11-03 21:07:11 28 4
gpt4 key购买 nike

我正在为一个学校项目使用 python 3(使用 pygame)编写一个游戏,但我遇到了一些困难:我试图让我的 Sprite 在移动时有动画,但它只显示静态图像:当我按下左键时, Sprite 的图像会变为静态图像,而不是由 3 个 png 组成的动画。这是该部分代码:

clock = pygame.time.Clock()

walkRight = [pygame.image.load('ressources/images/R1.png'), pygame.image.load('ressources/images/R2.png'), pygame.image.load('ressources/images/R3.png')]
walkLeft = [pygame.image.load('ressources/images/L1.png'), pygame.image.load('ressources/images/L2.png'), pygame.image.load('ressources/images/L3.png')]
walkUp = [pygame.image.load('ressources/images/U1.png'), pygame.image.load('ressources/images/U2.png'), pygame.image.load('ressources/images/U3.png')]
walkDown = [pygame.image.load('ressources/images/D1.png'), pygame.image.load('ressources/images/D2.png'), pygame.image.load('ressources/images/D3.png')]


#this is the player sprite

class Player(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = (walkDown[4//3])
self.rect = self.image.get_rect()
self.rect.centerx = width / 2
self.rect.bottom = height / 2
self.speedx = 0
self.speedy = 0
self.velocity = 2


def update(self):
self.speedx = 0
self.speedy = 0
left = False
right = False
up = False
down = False
run = False
walkCount = 4
runCount = 4
clock.tick(FPS)
keys = pygame.key.get_pressed()

#I believe this is the part that has something wrong!
if walkCount + 1 >= 9:
walkCount = 0
if (down == True and run == False):
walkCount += 1
self.image = (walkDown[walkCount//3])
elif (up == True and run == False):
walkCount += 1
self.image = (walkUp[walkCount//3])
elif (right == True and run == False):
walkCount += 1
self.image = (walkRight[walkCount//3])
elif (left == True and run == False):
walkCount += 1
self.image = (walkLeft[walkCount//3])

最佳答案

walkCount 是方法update 中的局部变量。每次调用 update 时都会通过 4 对其进行初始化。因此,每次函数开始时 walkCount 的值都是相同的。这导致图像看起来是静态的。
walkCount 必须是类 Player 的属性,而不是局部变量:

class Player(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image = (walkDown[4//3])
self.rect = self.image.get_rect()
self.rect.centerx = width / 2
self.rect.bottom = height / 2
self.speedx = 0
self.speedy = 0
self.velocity = 2

self.walkCount = 4 # <---- add attribute

def update(self):

# [...]

# walkCount = 4 <------ delete local variable

keys = pygame.key.get_pressed()
down = keys[pygame.K_DOWN]
up = keys[pygame.K_UP]
right = keys[pygame.K_RIGHT]
left = keys[pygame.K_LEFT]
run = False

if self.walkCount + 1 >= 9:
self.walkCount = 0
if (down == True and run == False):
self.walkCount += 1
self.image = (walkDown[self.walkCount//3])
elif (up == True and run == False):
self.walkCount += 1
self.image = (walkUp[self.walkCount//3])
elif (right == True and run == False):
self.walkCount += 1
self.image = (walkRight[self.walkCount//3])
elif (left == True and run == False):
self.walkCount += 1
self.image = (walkLeft[self.walkCount//3])

关于python - 如何修复 pygame 中的 Sprite 动画?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55324207/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com