Гравитация работает только после нажатия клавиши AS3

Вот моя проблема, я новичок в программировании, и я следую учебнику, чтобы изучать случайные вещи. До сих пор у меня все работало, кроме гравитации. Когда я запускаю программу, мой плеер плавает, но когда я нажимаю клавишу «вниз», только тогда начинает действовать гравитация. Я не могу понять, почему.

if(leftBumping){
    if(xSpeed < 0){
        xSpeed *= -0.5;
    }
}

if(rightBumping){
    if(xSpeed > 0){
        xSpeed *= -0.5;
    }
}

if(upBumping){
    if(ySpeed < 0){
        ySpeed *= -0.5;
    }
}

if(downBumping){
    if(ySpeed > 0){
        ySpeed *= 0.0;
    }




} 
else {
        ySpeed += gravityConstant;
}

У меня есть трассировка на ударных столкновениях, и все они работают правильно. Если я нахожусь в открытом космосе, он не обнаруживает столкновения, и при касании стен вывод показывает, что я нахожусь. Я переделывал эти строки часами. Пожалуйста помоги

это тоже может помочь

if(aPressed){
    xSpeed -= speedConstant;

} else if (dPressed){
    xSpeed += speedConstant;

}

if (wPressed){
    ySpeed -= speedConstant;

} else if(sPressed){
    ySpeed += speedConstant;
}
if(leftBumping){
    if(xSpeed < 0){
        xSpeed *= -0.5;
    }
}

person Bruce Worley    schedule 23.07.2013    source источник
comment
Вероятно, было бы полезно иметь немного больше контекста. Где вы указываете ответы на разные клавиши?   -  person seaotternerd    schedule 24.07.2013
comment
Вот почти вся моя программа. могу все выложить, только не знаю нужно ли   -  person Bruce Worley    schedule 24.07.2013
comment
Как устанавливается downBumping?   -  person Pan    schedule 24.07.2013


Ответы (1)


Вам нужно придерживаться этого бита:

ySpeed += gravityConstant;

в функцию, которая вызывается каждый кадр, например:

this.addEventListener(Event.ENTER_FRAME, onEnterFrame)

private function onEnterFrame(e:Event):void
{
    ySpeed += gravityConstant;
}

если это происходит слишком быстро, вам нужно либо уменьшить гравитационную постоянную, либо уменьшить частоту кадров, либо использовать таймер, а не энтерфрейм.

person Glitcher    schedule 24.07.2013