让一条线捕捉到一个点的中心

时间:2013-10-01 12:29:23

标签: actionscript-3 snapping

我正在为我在AS3的实习制作一个触摸屏连接点游戏,这里是我游戏流程的快速缩影:

  1. 用户选择一个级别。
  2. 加载该级别的图像/坐标,并将图像添加到舞台上。
  3. 当加载点的坐标(XML)时,点会得到附加到它们的MovieClips(circlePoint)。所有这些MovieClip都有一个唯一值(circlePoint.id)和一个MouseEvent.MOUSE_OVER侦听器,可以触发clickPoint()。 MovieClips会被推送到pointContainer
  4. 我的鼠标后面有一条直线,从第一个点开始。
  5. 如果我的gameCounter变量与MovieClip的id相同,则该行将捕捉到该点,并且将在我的鼠标后面开始一个新行。当然,这一新行从最后触及的点开始。
  6. 所有这一切都像一个魅力,但我面临一个问题;如果我的鼠标与MovieClip发生碰撞,则该行会捕捉当前鼠标位置。那个位置是我circlePoint的一角,我希望它成为中心。所以我决定让新线从当前点的中心开始。但前一行仍然在circlePoint的角落,新的一行从中心开始,看起来不太好。我想减少我的点的大小,但点太小,不能触摸,因为它是一个触摸屏游戏。这是我到目前为止所写的:

    private function setStartPoint():void{
        mouseLines.push(new Sprite);
        stage.addChild(mouseLines[mouseLines.length-1]);
        holderX = pointContainer.getChildAt(0).x;
        holderY = pointContainer.getChildAt(0).y;
        stage.removeEventListener(MouseEvent.CLICK, setStartPoint);
        stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseFollower);
        stage.addEventListener(MouseEvent.CLICK, clickPoint);
    }
    

    将所有MovieClip添加到舞台时,会触发setStartPoint()功能。

    private function clickPoint(e:MouseEvent):void{
        if(gameCounter == e.target.id){
            holderX = e.target.x;
            holderY = e.target.y;
            mouseLines[mouseLines.length-1].graphics.lineTo(holderX, holderY);
            stage.removeEventListener(MouseEvent.MOUSE_MOVE, mouseFollower);
    
            gameCounter++;
            mouseLines.push(new Sprite);
            stage.addChild(mouseLines[mouseLines.length-1]);
            stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseFollower);
        }
    }
    

    clickPoint()如上所述在MOUSE_OVER被解雇。

    private function mouseFollower(e:MouseEvent):void{
        mouseLines[mouseLines.length-1].graphics.clear();
        mouseLines[mouseLines.length-1].graphics.lineStyle(5,0x0000FF);
        mouseLines[mouseLines.length-1].graphics.moveTo(holderX, holderY);
        mouseLines[mouseLines.length-1].graphics.lineTo(mouseX, mouseY);
        mouseLines[mouseLines.length-1].mouseEnabled = false;
    }
    

    mouseFollower()函数在MOUSE_MOVE上绘制线条。当然,mouseEnabled设置为false,因此无法点击。

    非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

我觉得你在这里要做的就是在图形程序(如Photoshop)中绘制自由形式。因此,我认为你为自己制造复杂的东西。你可以让圆心是矢量,然后在它们之间划一条线。然后你可以很容易地说出像。

private function mouseFollower(e:MouseEvent):void{
  if(e.Hittest){
    DrawLine(lastVector,curVector);
  }
}

(这是伪代码所以。)