Простая лодка в ActionScript - PullRequest
0 голосов
/ 26 апреля 2011

Я создаю простую управляемую лодку в Actionscript и заставляю ее идти вперед, поворачивать влево и вправо, но не могу заставить ее поворачиваться. Я хочу, чтобы лодка шла в направлении, куда она указывает.

function moveBoat(event:Event):void
{
    if(rightKeyIsDown)
    {
        player_mc.x += speed;
        player_mc.rotationZ += speed;
    }
    if(leftKeyIsDown)
    {
        player_mc.x -= speed;
        player_mc.rotationZ -= speed;

    }
    if(upKeyIsDown)
    {
        player_mc.y -= speed;
    }
}

Заранее спасибо всем, кто может сказать мне, что я делаю неправильно.

EDIT:

function moveBoat(event:Event):void
{
    if(rightKeyIsDown)
    {
        player_mc.rotationZ += turnFactor;
    }
    if(leftKeyIsDown)
    {
        player_mc.rotationZ -= turnFactor;
    }
    if(upKeyIsDown)
    {
        player_mc.x += speed * Math.cos(player_mc.rotationZ * Math.PI / 180);
        player_mc.y -= speed * Math.sin(player_mc.rotationZ * Math.PI / 180);
    }
}

EDIT

function moveBoat(event:Event):void
{
    if(rightKeyIsDown)
    {
        player_mc.rotation += turnFactor;
    }
    if(leftKeyIsDown)
    {
        player_mc.rotation -= turnFactor;
    }
    if( upKeyIsDown )
    {
        // convert our rotation to radians first
        var rads:Number = player_mc.rotation * ( Math.PI / 180.0 );
        player_mc.x += speed * Math.cos( rads );
        player_mc.y += speed * Math.sin( rads );
    }
}

Ответы [ 3 ]

1 голос
/ 26 апреля 2011

Попробуйте что-то вроде:

function moveBoat(event:Event):void
{
    if(rightKeyIsDown)
    {
        player_mc.rotationZ -= turnFactor;
    }
    if(leftKeyIsDown)
    {
        player_mc.rotationZ += turnFactor;
    }
    if(upKeyIsDown)
    {
        player_mc.x += speed * Math.cos(player_mc.rotationZ * Math.PI / 180);
        player_mc.y -= speed * Math.sin(player_mc.rotationZ * Math.PI / 180);
    }
}

Я не могу проверить код прямо сейчас, но этого должно быть достаточно, чтобы объяснить идею. То, что я делаю по-разному, - это использование левой и правой клавиш для управления кораблем (путем изменения его угла) и перемещения в направлении, в котором он направлен, при нажатии клавиши «Вверх».

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

0 голосов
/ 26 апреля 2011

Используйте простую тригонометрию, чтобы выяснить, на сколько нужно переместить объект по осям X и Y. Создайте прямоугольный треугольник, где лодка находится в точке A, ее скорость равна h, а ориентация лодки равна углу A:

right triangle

Теперь используйте синус и косинус, чтобы выяснить длину сторон a и b. Вот как далеко двигаться по осям X и Y.

0 голосов
/ 26 апреля 2011

TokPhobia почти все правильно

private function _moveBoat(event:Event):void
{
    if( rightKeyIsDown )
        this.m_player.rotation += turnFactor;

    if ( leftKeyIsDown )
        this.m_player.rotation -= turnFactor;

    if( upKeyIsDown )
    {
        // convert our rotation to radians first
        var rads:Number = this.m_player.rotation * ( Math.PI / 180.0 );
        this.m_player.x += speed * Math.cos( rads );
        this.m_player.y += speed * Math.sin( rads );
    }
}

Кстати, если вы не делаете это в 3D, свойство rotation будет работать очень хорошо, вам не нужно использовать rotationZ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...