pygame中的按键处理和边界碰撞的问题
问题描述:
因此,首先,我遇到了碰撞处理问题。基本上,我有这样的代码:pygame中的按键处理和边界碰撞的问题
x_move = 0
player_width = 115
...
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_a:
x_move -= 6
if event.key == pygame.K_d:
x_move += 6
print(x_move)
if event.type == pygame.KEYUP:
if event.key == pygame.K_a or event.key == pygame.K_d:
x_move = 0
if x > display_width - player_width:
x_move -= 1
if x < 0:
x_move += 1
x += x_move
显然,当玩家按下“A”他们向左走,当他们按“d”,他们去的权利。现在边界碰撞非常便宜,我从一开始就知道这一点。
我的想法是检测玩家输入的画面,如果画面(或其后的画面)在屏幕外,减去精灵的宽度(这样玩家的一半不在屏幕外 - 这是一个飞船),然后拒绝玩家继续前进。
现在,这其他的实现实际上阻止了玩家继续前进,但是如果他们不断点击A或D,他们将逐帧移出屏幕。
但是,当他们碰到边缘时,他们会逐字地反弹回来,如果他们在正确的时间点击相反的方向,他们会增加速度并加快速度。
第二个问题是 - 除非他们完全释放密钥 - 他们不能使用另一个密钥。它阻止他们去任何地方。
任何人都可以帮助我了解幕后故事吗?这两个问题一直是我身边的一个棘手问题。
答
对于“他们不停地轻拍或d他们将移出画面一帧一帧” 你只需要改变你的代码:
if x > display_width - player_width + x_move:
x_move = 0
if x - x_move < 0:
x_move = 0
如果你不明白为什么,我可以解释,但我认为这很容易理解......
但是,我不明白“他们不能使用另一个键”,你在想什么?
使用此代码时,玩家会在边缘处冻结。 –
例如,当玩家要离开(K_a)时,他们必须完全释放K_a键,然后才能向右走。通常游戏允许一个人用最近按下的那个覆盖另一个。这样做非常不切实际,所以我希望能够用任何按键来覆盖按键。 –
所以你想让玩家在边缘弹跳? 您可以创建一个变量来计算按下了多少个键 –