Pygame - 速度不同

时间:2016-04-01 15:08:31

标签: python-2.7 pygame

如何以不同的速度在游戏中移动不同的东西?使用pygame.time.delaypygame.time.wait会对整个游戏产生影响。我想要一个Rect移动到clock.tick(30)而另一个Rect移动到clock.tick(10)的东西。我怎么能这样做?

修改 我正在寻找的不仅仅是运动(当然可以通过将不同的移动量添加到Rect.xRect.y来完成)。例如,我已经在其Surface上绘制了一个人应该在一个球后运行,我按下K_UP或K_DOWN并且还想要他的腿移动(以获得更好的运行图片!),所以我在不同的位置再次绘制它们等等。所以我需要更多的东西来控制我认为的帧速率。

2 个答案:

答案 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中查看我的答案,了解如何操作。