gpt4 book ai didi

python - 我想防止 Pygame 中的对角线移动

转载 作者:行者123 更新时间:2023-12-03 08:48:43 25 4
gpt4 key购买 nike

我正在制作蛇游戏的一个版本,并试图防止对角线移动。有没有办法防止多个 KEYDOWN 事件

这是我的辅助函数,用于检测 KEYDOWN 事件。

def _keydown_events(self, event):
'''Responds to pressing keystrokes'''
if event.type == pg.KEYDOWN:
if event.key == pg.K_q:
pg.display.quit()
running = False
sys.exit()
elif event.key == pg.K_RIGHT:
self.snake.move_right = True
elif event.key == pg.K_LEFT:
self.snake.move_left = True
elif event.key == pg.K_UP:
self.snake.move_up = True
elif event.key == pg.K_DOWN:
self.snake.move_down = True

最佳答案

您必须确保仅 self.snake.move_rightself.snake.move_leftself.snake.move_upself.snake.move_down 已设置,但绝不会同时设置 2 个或更多状态。例如:

def _keydown_events(self, event):
'''Responds to pressing keystrokes'''
if event.type == pg.KEYDOWN:
if event.key == pg.K_q:
pg.display.quit()
running = False
sys.exit()
elif if event.key in [pg.K_RIGHT, pg.K_LEFT, pg.K_UP, pg.K_DOWN]:
self.snake.move_right = False
self.snake.move_left = False
self.snake.move_up = False
self.snake.move_down = False
if event.key == pg.K_RIGHT:
self.snake.move_right = True
elif event.key == pg.K_LEFT:
self.snake.move_left = True
elif event.key == pg.K_UP:
self.snake.move_up = True
elif event.key == pg.K_DOWN:
self.snake.move_down = True

无论如何,我建议删除状态 self.snake.move_rightself.snake.move_leftself.snake.move_upself.snake.move_down.
使用单一状态来指示蛇的方向。添加状态 move_dir 并分配 pygame.key.name(event.key) 。对于 RIGHTLEFTUP,move_dir 的值分别变为“right”、“left”、“up”和“down” 向下。例如:

def _keydown_events(self, event):
'''Responds to pressing keystrokes'''
if event.type == pg.KEYDOWN:
if event.key == pg.K_q:
pg.display.quit()
running = False
sys.exit()

elif if event.key in [pg.K_RIGHT, pg.K_LEFT, pg.K_UP, pg.K_DOWN]:
# move_dir becomes "right", "left", "up" or "down"
self.snake.move_dir = pygame.key.name(event.key)

当然你可以直接给出移动向量:

def _keydown_events(self, event):
'''Responds to pressing keystrokes'''
if event.type == pg.KEYDOWN:
if event.key == pg.K_q:
pg.display.quit()
running = False
sys.exit()

elif if event.key in [pg.K_RIGHT, pg.K_LEFT, pg.K_UP, pg.K_DOWN]:

move_dirs = {pg.K_RIGHT: (1, 0), pg.K_LEFT: (-1, 0),
pg.K_UP: (0, -1), pg.K_DOWN: (0, 1)}
self.snake.move_dir = move_dirs[event.key]

关于python - 我想防止 Pygame 中的对角线移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60252752/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com