2012-03-03 21 views
0

如何使对象在到达目的地时停止?我用鼠标单击了该对象吗?代码使对象移动到鼠标点击的位置,但似乎无法找到如何使其停止,因为它几乎不会传递特定的目标点。 :/有人谁知道如何做到这一点?使对象直接移向某个点并在到达该点时停止

public function onMouseDown(evt:MouseEvent) 
    { 
     if (this._character != null) 
     { 
      _character.isMoving = false; 
      _character.dx = 0; 
      _character.dy = 0; 
      targetX = mouseX - _character.x; 
      targetY = mouseY - _character.y; 
      var angle:Number = Math.atan2(targetY,targetX); 
      var dx:Number = Math.cos(angle) * _character.speed; 
      var dy:Number = Math.sin(angle) * _character.speed; 
      _character.dx = dx; 
      _character.dy = dy; 
      _character.isMoving = true; 
     } 

    } 
    public function updateCharacter(e:Event):void 
    { 
     if (this._character.isMoving) 
     { 
      this._character.x += this._character.dx; 
      this._character.y += this._character.dy; 

     } 
    } 

回答

0

试试这个

package 
{ 
    import flash.display.MovieClip; 
    import flash.events.Event; 
    import flash.events.MouseEvent; 

    public class Guest extends MovieClip 
    { 
     var walkSpeed:Number = 5; 
     var oldPosX; 
     var oldPosY; 

     public function Guest() 
     { 
      stage.addEventListener(MouseEvent.CLICK, walk); 
     } 

     function walk(event:MouseEvent):void 
     { 
      oldPosX = parent.mouseX; 
      oldPosY = parent.mouseY; 
      rotation = Math.atan2(oldPosY - y,oldPosX - x)/Math.PI * 180; 
      addEventListener(Event.ENTER_FRAME, loop); 
     } 

     function loop(event:Event):void 
     { 
      // see if you're near the target 
      var dx:Number = oldPosX - x; 
      var dy:Number = oldPosY - y; 
      var distance:Number = Math.sqrt((dx*dx)+(dy*dy)); 
      if (distance<walkSpeed) 
      { 
       // if you are near the target, snap to it 
       x = oldPosX; 
       y = oldPosY; 
       removeEventListener(Event.ENTER_FRAME, loop); 
      } 
      else 
      { 
       x = x+Math.cos(rotation/180*Math.PI)*walkSpeed; 
       y = y+Math.sin(rotation/180*Math.PI)*walkSpeed; 
      } 

     } 
    } 
} 
+2

为什么从弧度转换为度数又回到原点? – Cheezey 2013-11-27 18:26:45

2

最简单的方法就是计算每次移动时要停止的角度。如果你直线移动,直到你通过你想要停止的点,这个值应该保持不变,在这一点上,它将发生剧烈变化。

发生这种情况后,只需将对象移回到应该停止的位置,然后再次渲染。


我已经为您创建了一个包含源代码的演示。有代码中有相当数量,因此而不是张贴在这里的一切,你可以下载源,而不是:

http://martywallace.com/testing/gotoPoint.zip

+0

无效链接,404 – FracturedRetina 2014-06-28 20:54:19

+0

@FracturedRetina谢谢,我会在今天晚些时候更新我的答案。 – Marty 2014-06-29 00:05:58

相关问题