【问题标题】:Pygame - different speedsPygame - 不同的速度
【发布时间】:2016-07-21 11:07:51
【问题描述】:

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

编辑: 我正在寻找的实际上不仅仅是运动(这当然可以通过将不同的运动量添加到Rect.xRect.y来完成)。例如,我在 Surface 上画了一个应该追球跑的人,我按下 K_UP 或 K_DOWN 并希望他的腿也能移动(以获得更漂亮的跑步画面!),所以我在不同的位置再次绘制它们并且很快。所以我需要更多的东西来控制我认为的帧速率。

【问题讨论】:

    标签: python-2.7 pygame


    【解决方案1】:

    这就是 pygame 中的 Clock 模块的用途。查看我在这个问题https://stackoverflow.com/a/35620064/5878272 中的回答,了解如何操作。

    【讨论】:

      【解决方案2】:

      你可以使用线程,但是代码会变得混乱......

      或者您可以在您的应用程序中设置一个“基本”标记,然后在您的主循环中计算循环的迭代次数。

      例子:

      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
      

      我每次迭代都会重置计数器,以免计数器值增长得太高...

      【讨论】:

      • 您能否发送一个链接以阅读有关 Threads 的信息?它们是特定于 pygame 的还是常见的 python 线程?
      • 感谢您的想法。为什么在主循环中将rect1Countrect2Count 设置为0,因为您使用% 需要吗?
      • @AmirTeymuri 我在主循环中将计数器重置为 0,以防止它们增长太高并使用太多内存......但如果你有无限内存,你不必这样做!
      • 对于线程,只需查看文档:docs.python.org/3/library/… (python 3.x) 或 docs.python.org/2.7/library/… (python 2.x)
      猜你喜欢
      • 1970-01-01
      • 2020-01-04
      • 2012-11-15
      • 1970-01-01
      • 2019-05-09
      • 1970-01-01
      • 2019-05-09
      • 1970-01-01
      • 2012-10-30
      相关资源
      最近更新 更多