慢慢地将物体旋转到另一个物体

时间:2010-01-27 20:48:16

标签: flash actionscript-3 actionscript flash-cs4

我有一个指向另一个物体方向的物体(即它旋转到第二个物体x和y坐标所在的方向),下面是我使用的代码。

var distx = target.x - x;
var disty = target.y - y;

var angle:Number = Math.atan2(disty, distx);


var vx:Number = Math.cos(angle) * cspeed;
var vy:Number = Math.sin(angle) * cspeed;
rotation = angle * 180/Math.PI;

x += vx;
y += vy;
你可以看到

它不仅向目标物体旋转,而且也朝向目标物体移动。当我播放电影时,对象立即指向目标对象并朝向它移动。

我希望它慢慢转向物体,而不是立即转向它。任何人都知道如何做到这一点。

3 个答案:

答案 0 :(得分:3)

我想试试这个功能

function averageNums($a:Number, $b:Number, $f:Number=0.5):Number {
   var avg:Number = (Math.atan2( Math.sin($a)*($f) + Math.sin($b)*(1-$f) , Math.cos($a)*($f) + Math.cos($b)*(1-$f) ));
   return avg;
}

和     rotation = averageNums(rotation / 180 * Math.PI,angle,0.9)* 180 / Math.PI;

f值会让你有更快/更慢的旋转

这种方式存在问题,例如平均0和180

答案 1 :(得分:1)

使用Tween做什么呢?您可以使用内置Flash库fl.transitions.TweenTweenerTweenLite等多种替代方案之一。

对于fl.transitions.Tween

import fl.transitions.Tween;
import fl.transitions.easing.*;
var myTween:Tween = new Tween(this, "rotation", Regular.easeOut, this.rotation, angle * 180/Math.PI, 3, true);

使用Tweener:

import com.caurina.transitions.Tweener
Tweener.addTween(this, {rotation:angle * 180 / Math.PI, time:3, transition:"easeOutQuad"});

使用TweenLite:

import com.greensock.*;
import com.greensock.easing.*;
TweenLite.to(this, 3, {rotation:angle * 180 / Math.PI, ease:Quad.easeOut});

答案 2 :(得分:1)

嘿,我知道这篇文章有点陈旧,但我一直在为此找一个解决方案,终于找到了解决这个问题的方法!是的我:D

此循环将使myAngle转向鼠标

        //loop
    function loop(e:Event) {
        var targetAngle:Number=Math.atan2(myStage.mouseY-y,myStage.mouseX-x);

        if(Math.abs(myAngle-targetAngle)>Math.PI){
            if(targetAngle>0){
                targetAngle-=Math.PI*2;
            }else{
                targetAngle+=Math.PI*2;
            }
        }

        if(myAngle>Math.PI){
            myAngle -=Math.PI*2;
        }

        if(myAngle<-Math.PI){
            myAngle +=Math.PI*2;
        }

        //this is to check if the angle is wide enough, otherwise myAngle will jiggle back and forth
        if (Math.abs(myAngle-targetAngle)>0.1) {
            if (myAngle-targetAngle<0) {
                myAngle+=0.1;
            } else {
                myAngle-=0.1;
            }
        }
相关问题