AS3: перемещение случайно сгенерированного объекта на основе его вращения - PullRequest
0 голосов
/ 26 октября 2011

Создаю игру на корабле, потому что я невероятно оригинален. Если не считать этого, у меня есть проблема. У меня есть функция для стрельбы из моего корабля в зависимости от его вращения, которая работает .. он использует этот код при создании:

        var b = new Bullet  ;
        b.x = x;
        b.y = y;
        b.rotation = rotation;
        parent.addChild(b);
        bullets.push(b);
        score -=  50;
        trace(enemybullets[30].x + "," + enemybullets[30].y);

Приведенный выше код относится к моему классу кораблей, поэтому я могу легко добиться правильного вращения пуль. И постоянно обновлять свою позицию в классе пули:

        x += Math.cos(rotation / 180 * Math.PI) * speed;
        y += Math.sin(rotation / 180 * Math.PI) * speed;

Так что все работает хорошо. Но у меня есть другой класс, EnemyBullet, который случайным образом генерирует и использует аналогичный код для установки направления и движения. В моем классе корабля:

        var eb = new EnemyBullet ;
        eb.x = (Math.random() * 550) - 550;
        //trace("eb.x is " + eb.x)
        eb.y = (Math.random() * 400) - 400;
        //trace("eb.y is " + eb.y);
        var a1 = eb.y - y;
        var b1 = eb.x - x;
        var radians1 = Math.atan2(a1,b1);
        var degrees1 = radians1 / Math.PI / 180;
        eb.rotation = degrees1;
        if (enemybullets.length < 50)
        {
            parent.addChild(eb);
            enemybullets.push(eb);
        }

А в классе EnemyBullet:

        x += Math.cos(rotation / 180 * Math.PI) * speed;
        y += Math.sin(rotation / 180 * Math.PI) * speed;

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

x: 121.55, y:-162.05
x: 1197.05, y:-162.05
x: 1842.35, y:-162.05
x: 2368.15, y:-162.05
x: 2547.4, y:-162.05
x: 2702.75, y:-162.05
x: 2882, y:-162.05

Я понимаю, что вращение, следовательно, всегда горизонтальное, но я не могу понять, почему? Кто-нибудь может дать мне ответ? Предполагая, что это достаточно просто, потому что код, который я использовал для настройки поворота, - это тот же рабочий код, который я использовал для поворота фрагмента ролика по направлению к мыши.

Есть идеи?

Ta!

1 Ответ

0 голосов
/ 26 октября 2011

Преобразование из радианов в градусы содержит ошибку:

var degrees1 = radians1 / Math.PI / 180;

Должно быть:

var degrees1 = radians1 / Math.PI * 180;

Или, чтобы сделать его более понятным:

var degrees1 = 180 * radians1 / Math.PI;

В вашем случае степень1, вероятно, является значением около 0;поэтому движение всегда горизонтальное.

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