Я согласен, что в вашем коде есть небольшая логическая проблема.Ваш корабль будет двигаться в день суда, потому что две переменные, отвечающие за скорость его движения - shipMoveX и shipMoveY - не ухудшаются автоматически с течением времени.
Теперь есть буквально тысячи способов, как это могло бы произойтибыть достигнутым, но давайте будем простыми.Вы используете переменную класса с именем thrustPower - убедитесь, что для нее установлено значение 0.1 , а значение обоих shipMoveX & shipMoveY равно 0 .Дополнительно добавьте эти переменные класса:
private var thrustHorizontal:Number = 0;
private var thrustVertical:Number = 0;
private var speed:Number = 0;
private var maxSpeed:Number = 5;
private var decay:Number = 0.97;
Замените функцию moveShip на это:
public function moveShip(timeDiff:uint):void
{
thrustHorizontal = Math.sin(Math.PI * ship.rotation / 180);
thrustVertical = Math.cos(Math.PI * ship.rotation / 180);
// rotate and thrust
if (leftArrow)
{
ship.rotation -= shipRotationSpeed * timeDiff;
}
else if (rightArrow)
{
ship.rotation += shipRotationSpeed * timeDiff;
}
else if (upArrow)
{
shipMoveX += thrustPower * thrustHorizontal;
shipMoveY += thrustPower * thrustVertical;
}
else if (downArrow)
{
shipMoveX -= thrustPower * thrustHorizontal;
shipMoveY -= thrustPower * thrustVertical;
}
if (!upArrow && !downArrow)
{
shipMoveX *= decay;
shipMoveY *= decay;
}
speed = Math.sqrt((shipMoveX * shipMoveX) + (shipMoveY * shipMoveY));
if (speed > maxSpeed)
{
shipMoveX *= maxSpeed / speed;
shipMoveY *= maxSpeed / speed;
}
ship.x += shipMoveX;
ship.y -= shipMoveY;
}
Как видите, есть новый блок if:
if (!upArrow && !downArrow)
{
shipMoveX *= decay;
shipMoveY *= decay;
}
Здесь мы рассматриваем случай, если игрок не нажал ни вверх, ни вниз и умножил горизонтальную / вертикальную скорость космических кораблей на decay .Если вы прокрутите немного назад, вы заметите, что это значение равно 0,97 .Обычно вы можете сказать, что если вы умножите положительное число x на 0
Так что, если ваш spaship в настоящее время движется горизонтально со скоростью 3 пикселя на кадр (shipMoveX = 3;shipMoveY = 0) это станет 2.91 в следующем кадре.В следующем кадре это будет 2.8227, затем 2.738019 ... и так далее, прежде чем он, наконец, достигнет нуля в бесконечности.