Adobe Flash CS4 вращения математика - PullRequest
3 голосов
/ 30 июня 2011

В настоящее время у меня возникают проблемы с вращением моего объекта лицом к другому объекту. В настоящее время он работает нормально, поскольку на этом рисунке мой объект в начале координат сможет вращаться и перемещаться к объекту в 3 квадрантах, кроме квадранта с положительнымОт 90 градусов до 180 градусов, мой объект будет вращаться на несколько полных оборотов в течение некоторого времени при перемещении к объекту. Кто-нибудь знает почему?предложение, которое я использую для поворота, - rotation += (foodLocationDegrees - (rotation - 90)) * .2;, при этом еда рассчитывается с использованием

var angle:Number = Math.atan2(foodTarget.y - y, foodTarget.x - x); 
            foodLocationDegrees =Math.floor((angle  * 180 / Math.PI));

y, где x - это объект, представляющий собой рыбу, а цель пищи - это объект пищи.*http://iepro.files.wordpress.com/2009/12/atan2.jpg?w=280&h=283

 public function moveToFood():void
        {   

            var dx:Number = x - _destinationX;
            var dy:Number = y - _destinationY;

            trace("Food location degree relative to fish mouth "+foodLocationDegrees);
            var targetRotation:Number = 0;
            if (foodLocationDegrees > 0 && foodLocationDegrees < 90)
            {
            trace("food is on 1st quadrant of the fish mount");
                this.x -= dx / 18;
                this.y -= dy / 18;
            }else if (foodLocationDegrees > 90 && foodLocationDegrees < 180)
            {
            trace("food is on 2nd quadrant of the fish mount"); 

                this.x -= dx / 18;
                this.y -= dy / 18;
            }else if (foodLocationDegrees > -180 && foodLocationDegrees < -90)
            {
                trace("food is on 3nd quadrant of the fish mount");

                this.x -= dx / 18;
                this.y -= dy / 18;
            }else if (foodLocationDegrees < 0 && foodLocationDegrees > -90)
            {
                trace("food is on 4nd quadrant of the fish mount");

                this.x -= dx / 18;
                this.y -= dy / 18;
            }
            trace("Before adding Rotation " + rotation);
            var number:Number = (foodLocationDegrees - (rotation - 90)) * .1;
            trace("rotation to add "+number);
            rotation += (foodLocationDegrees - (rotation - 90)) * .2;

            trace("After adding Rotation " + rotation);

            //removing food when both hit boxes hit
            if (hit.hitTestObject(foodTarget.hit))
            {
                foodInPond--;
                foodTarget.removeSelf();
            }

        }

1 Ответ

0 голосов
/ 30 июня 2011
public function moveToFood(food:Food):void
{
    var speed:Number = 6.5;

    var a:Number = food.x - x;
    var b:Number = food.y - y;
    var ang:Number = Math.atan2(b, a);

    rotation = ang * 180 / Math.PI;

    x += Math.cos(ang) * speed;
    y += Math.sin(ang) * speed;
}

Разве вы не можете просто использовать sin и cos, чтобы двигаться в направлении, в котором вы находитесь?

...