如何以不同的速度在游戏中移动不同的东西?使用pygame.time.delay
或pygame.time.wait
会对整个游戏产生影响。我想要一个Rect移动到clock.tick(30)
而另一个Rect移动到clock.tick(10)
的东西。我怎么能这样做?
修改
我正在寻找的不仅仅是运动(当然可以通过将不同的移动量添加到Rect.x
和Rect.y
来完成)。例如,我已经在其Surface上绘制了一个人应该在一个球后运行,我按下K_UP或K_DOWN并且还想要他的腿移动(以获得更好的运行图片!),所以我在不同的位置再次绘制它们等等。所以我需要更多的东西来控制我认为的帧速率。
答案 0 :(得分:0)
您可以使用线程,但代码可能会变得混乱......
或者你可以设置一个" base"在你的应用程序中打勾,然后在你的主循环中,计算循环的迭代次数。
示例:
tick = 5 # one iteration = 5ms (it is the frame rate: 200FPS (theoric, of course! I think you might give an higer value)
#counters
rect1Count = 0
rect2Count = 2
delays
rect1Delay = 10
rect2Delay = 30
rect1Modulo = rect1Delay / tick # = 2
rect2Modulo = rect2Delay / tick # = 6
#main loop
while True:
pygame.time.delay(tick)
rect1Count +=1
rect2Count +=1
if rect1Count%rect1Modulo == 0:
#move rect1 every 2 iteration (because 5 * 2 = 10)
rect1Count = 0
if rect2Count%rect2Modulo == 0:
#every 3 iterations (so 5 * 6 = 30ms
#move rect2
rect2Count = 0
#render code, etc...
#You can easily add your K_UP and K_DOWN event here
我每次迭代都重置计数器,不要看到计数器值变得过高......
答案 1 :(得分:0)
这是pygame中的Clock模块的用途。在这个问题https://stackoverflow.com/a/35620064/5878272中查看我的答案,了解如何操作。