2011-11-17 41 views
1

我想获得提示停止旋转时,它是在MOUSE_DOWN事件,但继续将距离的鼠标x和mouseY添加到距离从cueball提示。换句话说,为了让线索沿线滑动,线索被瞄准了。试图找到一种方式来“滑动”cuestick在ActionScript 3.0的台球游戏

Cue.addEventListener(Event.ENTER_FRAME, aimCue); 
    Cue.addEventListener(MouseEvent.MOUSE_DOWN,StartToShoot); 
    addEventListener(Event.ENTER_FRAME,MoveBalls); 

    public function aimCue(event:Event) 
    { 
     var dx:Number = Cueball.x - Cue.x; 
     var dy:Number = Cueball.y - Cue.y; 
     var angle:Number = Math.atan2(dy,dx); 
     Cue.rotation = angle * 180/Math.PI; 
     Cue.x = mouseX; 
     Cue.y = mouseY; 
    } 
    public function StartToShoot(event:MouseEvent) 
    { 
     var dx:Number = Cueball.x - mouseX; 
     var dy:Number = Cueball.y - mouseY; 
     var dist:Number = Math.sqrt(dx * dx + dy * dy); 
     //Cue.x = dx + Cueball.x; 
     //Cue.y = dy + Cueball.y; 


     if (dist > 230) 
     { 
      Cue.startx = Cue.x; 
      Cue.starty = Cue.y; 

      Cue.addEventListener(Event.ENTER_FRAME,FinishShoot); 
     } 
    } 
    public function FinishShoot(event:Event) 
    { 
     var dx:Number = Cueball.x - Cue.x; 
     var dy:Number = Cueball.y - Cue.y; 
     var dist:Number = Math.sqrt(dx * dx + dy * dy); 

     if (dist < 230) 
     { 
      Cueball.vx = Cue.x - Cue.startx; 
      Cueball.vy = Cue.y - Cue.starty; 
      Cue.removeEventListener(Event.ENTER_FRAME,FinishShoot); 
     } 

    } 

回答

1

您可以添加一个布尔isShooting实例。在您的MOUSE_DOWN处理程序中,您可以将其设置为true并在aimCue内检查是否为真。当你完成拍摄时,你可以再次将其设置为假。

Cue.addEventListener(Event.ENTER_FRAME, aimCue); 
Cue.addEventListener(MouseEvent.MOUSE_DOWN,StartToShoot); 
addEventListener(Event.ENTER_FRAME,MoveBalls);  

private var isShooting:Boolean = false; 

public function aimCue(event:Event) 
{ 
    if(!isShooting) 
    { 
     var dx:Number = Cueball.x - Cue.x; 
     var dy:Number = Cueball.y - Cue.y; 
     var angle:Number = Math.atan2(dy,dx); 
     Cue.rotation = angle * 180/Math.PI; 
     Cue.x = mouseX; 
     Cue.y = mouseY; 
    } 
} 
public function StartToShoot(event:MouseEvent) 
{ 

    isShooting = true; 

    var dx:Number = Cueball.x - mouseX; 
    var dy:Number = Cueball.y - mouseY; 
    var dist:Number = Math.sqrt(dx * dx + dy * dy); 
    //Cue.x = dx + Cueball.x; 
    //Cue.y = dy + Cueball.y; 


    if (dist > 230) 
    { 
     Cue.startx = Cue.x; 
     Cue.starty = Cue.y; 

     Cue.addEventListener(Event.ENTER_FRAME,FinishShoot); 
    } 
} 

对于逻辑来移动你的提示,你可以使用这样的事情: (不要忘记删除舞台监听器,当你拍完)

private var storedPoint:Point; 

public function StartToShoot(event:MouseEvent) 
{ 

    isShooting = true; 

    storedPoint = new Point(stage.mouseX, stage.mouseY); 

    stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove); 
} 

private function onMouseMove(e:MouseEvent):void 
{ 
    var curPoint:Point = new Point(stage.mouseX, stage.mouseY); 
    var distance:Number = Point.distance(storedPoint, curPoint); 

    /* do stuff with the distance*/ 

    e.updateAfterEvent(); 
} 
+0

谢谢。现在我需要找出在isShooting为true时移动提示的数学。 –

+0

我用一个如何做距离逻辑的例子更新了答案。希望这可以帮助你朝着正确的方向发展 –

+0

这看起来不错。谢谢! –

0

你可以使用任何补间库例如greensock.com

在你需要输入X & y坐标球杆&的补间图书馆应处理剩下的目的地最小...

比方说,你“拍”,用鼠标,您可以使用鼠标向下坐标&确定一个坐标轴。

当你有一个轴时,你只需要通过检查轴和母球重叠的位置来计算出一个母球命中点。这会给你提示杆的x,y目标坐标。