0

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

  1. 用户选择一个级别。
  2. 加载该级别的图像/坐标,并将图像添加到舞台。
  3. 当加载点的坐标 (XML) 时,这些点将获得circlePoint附加的 MovieClips ( )。所有这些 MovieClip 都有一个唯一的值 ( circlePoint.id) 和一个MouseEvent.MOUSE_OVER触发的侦听器clickPoint()。影片剪辑被推入我的pointContainer.
  4. 一条直线跟随我的鼠标,从第一个点开始。
  5. 如果我的gameCounter变量与 MovieClip 的变量相同id,则该行将捕捉到该点,并且新行将开始跟随我的鼠标。当然,这条新线从被触摸的最后一个点开始。

所有这一切都像一种魅力,但我面临一个问题;如果我的鼠标与 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);
}

setStartPoint()当所有的 MovieClips 都添加到舞台时触发该函数。

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 所以它是不可点击的。

任何帮助将不胜感激。

4

1 回答 1

0

我觉得您在这里尝试做的事情类似于在图形程序(例如 Photoshop)中绘制自由形式。因此,我认为您正在使自己变得复杂。您可以将圆的中心设为向量,然后在它们之间画一条线。然后你可以很容易地说出类似的话。

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

(这是伪代码。)

于 2013-10-01T13:47:48.347 回答