我正在做一个蛇形运动的游戏。我认为,获得好结果的最好方法是制作单独的线程来处理用户的键盘输入。以下是我希望在单独线程中运行的函数:
def _handle_keyboard_input(self):
while self.is_running:
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
self._set_velocity(-1, 0)
elif event.key == pygame.K_RIGHT:
self._set_velocity(1, 0)
elif event.key == pygame.K_UP:
self._set_velocity(0, -1)
elif event.key == pygame.K_DOWN:
self._set_velocity(0, 1)
def _set_velocity(self, x, y):
self._velocity_x = x
self._velocity_y = y
虽然我很担心,但如果不断循环,CPU的负载会过大。我考虑过添加pygame.time.delay()
延迟,但我不确定是否会“点击”按键事件的正确时间(我在下面的网站上找到的图片)
我不想使用pygame.key.get_pressed()
,因为我不想对任何键进行优先级排序(例如,如果同时按下向左和向上箭头,我将不得不选择其中一个键)
最好的方法是什么
注意^{} 从队列中删除事件。如果您有多个事件循环(即使在不同的线程中),那么您将错过事件。无需比更新显示时更频繁地处理事件,因为状态更改仅在更新显示后“可见”。由于事件存储在队列中,因此不必在“正确”时刻获取事件,
pygame.event.get()
从队列中获取并移除所有挂起的事件如果希望每500毫秒移动一次蛇,那么我建议使用^{} 。方法^{} 返回自上次调用以来经过的毫秒数。
将毫秒相加,当总和超过500时移动蛇:
相关问题 更多 >
编程相关推荐