我正在为我在AS3的实习制作一个触摸屏连接点游戏,这里是我游戏流程的快速缩影:
circlePoint
)。所有这些MovieClip都有一个唯一值(circlePoint.id
)和一个MouseEvent.MOUSE_OVER
侦听器,可以触发clickPoint()
。 MovieClips会被推送到pointContainer
。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);
}
将所有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,因此无法点击。
非常感谢任何帮助。
答案 0 :(得分:0)
我觉得你在这里要做的就是在图形程序(如Photoshop)中绘制自由形式。因此,我认为你为自己制造复杂的东西。你可以让圆心是矢量,然后在它们之间划一条线。然后你可以很容易地说出像。
private function mouseFollower(e:MouseEvent):void{
if(e.Hittest){
DrawLine(lastVector,curVector);
}
}
(这是伪代码所以。)