Python/Pygame.. 麻烦 类
Python/Pygame.. Trouble w/ classes
大家好,我在制作游戏时遇到了一些问题....我想在图像每隔 "step" 发生变化时移动我的角色,它看起来像动画...
我已经为此工作了几个小时,但到目前为止我唯一做的就是移动字符,但所有图像都是在移动时一次性绘制的
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
currentimageleft = 1
gamedisplay.blit(background, (0,0))
if currentimageleft == 1:
gamedisplay.blit(temp1, (template_x, template_y), (g1x, g1y, box, box))
template_x -= moveit
currentimageleft += 1
if currentimageleft == 2:
gamedisplay.blit(temp1, (template_x, template_y), (g2x, g2y, box, box))
template_x -= moveit
currentimageleft += 1
if currentimageleft == 3:
gamedisplay.blit(temp1, (template_x, template_y), (g3x, g3y, box, box))
template_x -= moveit
currentimageleft += 1
if currentimageleft == 4:
gamedisplay.blit(temp1, (template_x, template_y), (g4x, g4y, box, box))
template_x -= moveit
currentimageleft = 1
pygame.display.update()
使用 elif
进行后续比较,这样每次迭代只进行一次。
由于您在每个 if
块中递增 currentimgeleft
,因此它会触发下一个 if
块。你只希望一个触发每一帧,所以将 if
切换为 elif
除了第一个,然后每次按下 K_LEFT
按钮时你将只有一个触发键盘。像这样
if currentimageleft == 1:
# code
elif currentimageleft == 2:
# code
...
但是,请注意,每次为按键输入更大的 if
语句时,您都会设置 currentimageleft
。这将确保您总是最终使用动画的第一个精灵。您可能希望将 currentimageleft
与 class 变量相关联,方法是在 __init__
中声明它类似于
def __init__(self, ...):
# other code, including possible parent constructors
self.currentleftimage = 1
# more code
然后您将使用 self.currentimageleft
而不是 currentimageleft
访问您的变量。然后,这将允许您在按钮按下检测中使用 else
或 elif
子句(代码段中的外部 if
)将 self.currentleftimage
变量重置回 1
允许您以这种方式跟踪运动。
您可能还会发现 this other answer on the equivalent form of switch
in Python 很有趣,尽管对 elif
子句的多次调用也是完全正常的,并且在许多情况下可能会导致代码更清晰。
大家好,我在制作游戏时遇到了一些问题....我想在图像每隔 "step" 发生变化时移动我的角色,它看起来像动画...
我已经为此工作了几个小时,但到目前为止我唯一做的就是移动字符,但所有图像都是在移动时一次性绘制的
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
currentimageleft = 1
gamedisplay.blit(background, (0,0))
if currentimageleft == 1:
gamedisplay.blit(temp1, (template_x, template_y), (g1x, g1y, box, box))
template_x -= moveit
currentimageleft += 1
if currentimageleft == 2:
gamedisplay.blit(temp1, (template_x, template_y), (g2x, g2y, box, box))
template_x -= moveit
currentimageleft += 1
if currentimageleft == 3:
gamedisplay.blit(temp1, (template_x, template_y), (g3x, g3y, box, box))
template_x -= moveit
currentimageleft += 1
if currentimageleft == 4:
gamedisplay.blit(temp1, (template_x, template_y), (g4x, g4y, box, box))
template_x -= moveit
currentimageleft = 1
pygame.display.update()
使用 elif
进行后续比较,这样每次迭代只进行一次。
由于您在每个 if
块中递增 currentimgeleft
,因此它会触发下一个 if
块。你只希望一个触发每一帧,所以将 if
切换为 elif
除了第一个,然后每次按下 K_LEFT
按钮时你将只有一个触发键盘。像这样
if currentimageleft == 1:
# code
elif currentimageleft == 2:
# code
...
但是,请注意,每次为按键输入更大的 if
语句时,您都会设置 currentimageleft
。这将确保您总是最终使用动画的第一个精灵。您可能希望将 currentimageleft
与 class 变量相关联,方法是在 __init__
中声明它类似于
def __init__(self, ...):
# other code, including possible parent constructors
self.currentleftimage = 1
# more code
然后您将使用 self.currentimageleft
而不是 currentimageleft
访问您的变量。然后,这将允许您在按钮按下检测中使用 else
或 elif
子句(代码段中的外部 if
)将 self.currentleftimage
变量重置回 1
允许您以这种方式跟踪运动。
您可能还会发现 this other answer on the equivalent form of switch
in Python 很有趣,尽管对 elif
子句的多次调用也是完全正常的,并且在许多情况下可能会导致代码更清晰。