当我使用某些命令时,游戏中的障碍物不会移动。我将按“ w”,它不会向上移动

时间:2019-05-18 22:32:00

标签: python-3.x pygame

我在python3中使用pygame,当我使用某些命令时,字符(块)不会移动。我对此问题感到困惑,需要帮助,谢谢。另外,我也不担心我无法从选项卡中退出。我被迫退出。

sqrt

预期结果是,当我按“ w”时,我的角色将向上移动。实际结果是该块停留在其位置。

1 个答案:

答案 0 :(得分:0)

这里有两件事。

  1. 通过更改其坐标移动矩形时,必须重新绘制。 pygame不会自动执行此操作。如果您未调用适当的功能,则屏幕不会更改。
  2. 您有User_Block = User_Block()。不要为该实例使用相同的类名。至少使用非大写字母:user_block = User_Block()。您将覆盖对该类的引用。

如何在屏幕上移动图像

在您的代码中,您使用pygame.draw.rect而不是Surface,因此为了与该选择保持一致,您需要再次调用:

pygame.draw.rect(screen, ...)

更新坐标后。我建议将命令放在类的方法中,当您需要重绘位置时可以调用主循环的每次迭代。
记住要删除先前位置的矩形:pygame不会为您完成此操作。您需要找到一种方法来做到这一点。

最简单但效率较低的方法是在重绘之前通过调用screen.fill(BLACK)来用背景色填充整个屏幕。效率较低,因为实际上您要重绘整个屏幕并删除其他图像,这些图像应在主循环的每次迭代中重绘。
这是相关的代码,将其放在更新坐标的行之后:

screen.fill(BLACK) #note: black is (0, 0, 0) not (255, 255, 255).
user_block.draw()
for en in Enemy_List:
  en.draw()

当然,您需要定义我上面所述的draw方法。

最后,在pygame坐标系中,y朝着屏幕底部增加。因此,要上升,您需要减小y的值。

最后说明::就像我说的那样,这样的绘制效率很低。在这种简单的情况下就可以了,但是对于复杂的游戏来说,如果有很多东西在移动,将会减慢游戏的速度。我们可以做得更好,但是我认为这里的解释范围太广了,您可以研究如何做,看看Surface及其blit的启动方法。