враг очень странно вращается - PullRequest
1 голос
/ 03 ноября 2011

У меня есть проблема: есть этот враг, который вращается к моему игроку.Во время «вращения» противника с моим игроком я вижу, что противник вращается в направлении моего игрока.И тогда противник внезапно поворачивается на 360 градусов и снова поворачивается к моему игроку.Я не знаю, почему он делает этот странный поворот на 360 градусов, но это происходит каждый раз, когда я в течение нескольких секунд вращаюсь вокруг врага.Пожалуйста, кто-нибудь может мне помочь с этой проблемой?Я ценю каждый совет, который я могу получить, потому что я не знаю, где может быть проблема.

tempEnemy.dX = tempEnemy.x - player.x;
tempEnemy.dY = tempEnemy.y - player.y;

tempEnemy.rotateTo = toDegrees(getRadians(tempEnemy.dX, tempEnemy.dY));



if(tempEnemy.frame < 0) tempEnemy.frame += 360;
if(tempEnemy.frame > 359) tempEnemy.frame -= 360;


tempEnemy.trueRotation = int((tempEnemy.rotateTo - tempEnemy.frame) / tempEnemy.rotateSpeed);

tempEnemy.vX += (player.x - tempEnemy.x) / tempEnemy._speed;
tempEnemy.vY += (player.y - tempEnemy.y) / tempEnemy._speed;

tempEnemy.vX *= tempEnemy.decay;
tempEnemy.vY *= tempEnemy.decay;

Обновление:

private function toDegrees(radians:Number):Number
    {
        var degrees:Number = Math.floor(radians * 180 / Math.PI);
        //trace (degrees);
        return degrees;
    }

private function getRadians(deltaX:Number, deltaY:Number):Number
    {
        var radian:Number = Math.atan2(deltaY, deltaX);

        if (deltaY < 0)
        {
            radian += (2 * Math.PI);
        }
        return(radian);
    }

Ответы [ 2 ]

1 голос
/ 03 ноября 2011

Похоже, вы использовали анимацию времени. Либо используйте анимацию кода, либо возьмите анимацию, которую я использовал здесь http://flexdiary.blogspot.com/2010/04/sample-code-for-oop-timeline-insideria.html. Я не помню, что именно я сделал, чтобы анимация на временной шкале прошла полный круг, вместо того, чтобы повернуть назад перед перезапуском, но вы должны иметь возможность экспортировать и повторно использовать анимацию.

Если вы хотите использовать анимацию кода, вы можете использовать встроенные в Flash классы анимации или использовать библиотеку типа Tweensy.

1 голос
/ 03 ноября 2011

Не видя функцию getRadians, возможно, вы проходите 360 °, вычисляя угол отражения?

Может быть, что-то вроде:

var degrees:Number = Math.atan2(tempEnemy.y - player.y, tempEnemy.x - player.x) * 180 / Math.PI;
var delta:Number = degrees - tempEnemy.rotation;

while (delta <= -180)
    delta += 360;
while (delta > 180)
    delta -= 360;

Компенсировать degrees с помощью угла покоя дизайна отображаемого объекта противника.

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