【发布时间】:2018-07-24 09:46:29
【问题描述】:
我知道这个问题已经以其他形式得到解答,但我似乎无法让它适用于我的游戏。我正在尝试让精灵移动并将他留在他移动到的地方。这是我的代码的一部分:
class player(pygame.sprite.Sprite):
def __init__(self, x, y):
pygame.sprite.Sprite.__init__(self)
def draw(self, x, y):
player = pygame.image.load("stand_down.png").convert_alpha()
player = pygame.transform.scale(player, (100, 200))
screen.blit(player, (x, y))
pygame.display.update()
for event in pygame.event.get():
key = pygame.key.get_pressed()
if event.type == KEYDOWN :
if key [K_LEFT] :
player = pygame.image.load("standleft.png").convert_alpha()
player = pygame.transform.scale(player, (100, 200))
x -= 50
screen.blit(player, (x, y))
pygame.display.update()
pygame.sprite.Sprite.update(player)
if key [K_RIGHT]:
player = pygame.image.load("standright.png").convert_alpha()
player = pygame.transform.scale(player, (100, 200))
x += 50
screen.blit(player, (x, y))
pygame.display.update()
pygame.sprite.Sprite.update(player)
def update(self):
pygame.sprite.Sprite.update(player)
然后这是我的主要功能的一部分:
player.draw(screen, x, y)
player.update(screen)
我已经尝试了所有我能想到的方法,但玩家只是在不同的点不断闪烁,然后又回到了之前的位置。如果您能提供帮助,将不胜感激!
【问题讨论】:
-
如果你使用
event.type == KEYDOWN,那么使用event.key == K_LEFT -
不要在每个地方都使用
pygame.display.update()- 它会闪烁屏幕 - 只能循环使用一次。 -
不要一次又一次地在
draw()中加载图像 - 它会减慢程序速度 - 在__init__中只加载一次 -
不要在
draw()的三个地方blit(player)- 它会减慢程序 - 在draw()的末尾只做一次 -
使用
for event in pygame.event.get():外部玩家 - 您可能需要将事件发送给第二个玩家或其他对象。内部播放器仅使用if event.type == KEYDOWN :- 创建分离方法handle_event(self, event)是个好主意
标签: python animation pygame sprite