当相反方向连续快速按下到最后一个时,加速度变为零。

时间:2014-06-18 02:17:21

标签: python pygame game-physics

这是我的Hero类中的代码(播放器控制的那个),它运行每次更新:

self.speedx += ((self.dirx * self.maxspeed) - self.speedx) * self.acc
self.x+=self.speedx
self.speedy += ((self.diry * self.maxspeed) - self.speedy) * self.acc
self.y+=self.speedy

这是我的事件getterizer代码:

if event.type == KEYUP:
            if event.key == K_RIGHT:
                active.dirx=0
            if event.key == K_LEFT:
                active.dirx=0
            if event.key == K_UP:
                active.diry=0
            if event.key == K_DOWN:
                active.diry=0
        if event.type == KEYDOWN:
            if event.key == K_RIGHT:
                active.dirx=1
            if event.key == K_LEFT:
                active.dirx=-1
            if event.key == K_UP:
                active.diry=-1
            if event.key == K_DOWN:
                active.diry=1

问题在于,当我向右走(或向上)然后放开并快速按相反方向(向左,向下)时,我对该方向的加速度变为零。如果游戏不涉及很多反射并且我不能让玩家在战斗中挣扎,这不会是一个大问题。

任何解决方案?如果我不够清楚就说。

1 个答案:

答案 0 :(得分:0)

可能是在KEYUP之前收到了相反的KEYDOWN事件。我会保护KEUP事件处理,以确保没有发生相反的KEYDOWN。类似的东西:

if event.key == K_RIGHT and active.dirx == 1:
      active.dirx=0

...