2017-04-12 118 views
0

因此,首先,我遇到了碰撞处理问题。基本上,我有这样的代码: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,他们将逐帧移出屏幕。

但是,当他们碰到边缘时,他们会逐字地反弹回来,如果他们在正确的时间点击相反的方向,他们会增加速度并加快速度。

第二个问题是 - 除非他们完全释放密钥 - 他们不能使用另一个密钥。它阻止他们去任何地方。

任何人都可以帮助我了解幕后故事吗?这两个问题一直是我身边的一个棘手问题。

回答

0

对于“他们不停地轻拍或d他们将移出画面一帧一帧” 你只需要改变你的代码:

if x > display_width - player_width + x_move: 
    x_move = 0 
if x - x_move < 0: 
    x_move = 0 

如果你不明白为什么,我可以解释,但我认为这很容易理解......

但是,我不明白“他们不能使用另一个键”,你在想什么?

+0

使用此代码时,玩家会在边缘处冻结。 –

+0

例如,当玩家要离开(K_a)时,他们必须完全释放K_a键,然后才能向右走。通常游戏允许一个人用最近按下的那个覆盖另一个。这样做非常不切实际,所以我希望能够用任何按键来覆盖按键。 –

+0

所以你想让玩家在边缘弹跳? 您可以创建一个变量来计算按下了多少个键 –