使对象追逐另一个(AS3)

时间:2014-11-19 22:29:29

标签: actionscript-3 flash flashdevelop

所以我有一个对象,我想追逐另一个对象。一切都工作正常,但我试图实现一个easeTo函数,使对象不会采取最直接的路径到它追逐的对象的x,y位置。这也是有效的,但是我无法解决的事实是,物体速度的变化取决于它追逐的物体的距离。例如,如果被追逐的对象位于舞台的最右侧并且追踪器在最左侧产生,则它将非常快地朝向右侧的对象,并且当它靠近时减慢。我希望它以一致的速度前进。有什么建议吗?

由于

这是我的代码

        private function easeTo(cur:Point, target:Point, ease:Number):Point{

        var dx:Number = target.x - cur.x; 
        var dy:Number = target.y - cur.y;


        var finalResult:Point = new Point(); //create a var to hold the result

        finalResult.x = cur.x + (dx * ease);
        finalResult.y = cur.y + (dy * ease);

        return finalResult;


    }



    public function chase(xValue:Number, yValue:Number):void{

            //store current x and y in a point var
            var curPos:Point = new Point (x,y);

            //store the mouse x and y in a var
            var targetPos:Point = new Point(xValue, yValue);


            var nextPos:Point = easeTo(curPos, targetPos, 0.001);

            this.x = nextPos.x;
            this.y = nextPos.y;

    }

所以(xValue:Number,yValue:Number)是它追逐传递给chase函数的对象的x和y值。

1 个答案:

答案 0 :(得分:0)

我建议使用Math.min(当dx或dy为负时)和Math.max(当dx或dy为正时),并将您定义的值设为最大速度

即:

var maxSpeed:Number = 20;
if (dx >= 0){
   dx = Math.max(dx,maxSpeed)
}else{
   dx = Math.min(dx,maxSpeed)
}

重复dy