我在python3中使用pygame,当我使用某些命令时,字符(块)不会移动。我对此问题感到困惑,需要帮助,谢谢。另外,我也不担心我无法从选项卡中退出。我被迫退出。
sqrt
预期结果是,当我按“ w”时,我的角色将向上移动。实际结果是该块停留在其位置。
答案 0 :(得分:0)
这里有两件事。
pygame
不会自动执行此操作。如果您未调用适当的功能,则屏幕不会更改。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
的启动方法。>