2011-11-24 85 views
0

因此,我在Flash中毫无用处,愚蠢地认为创建斯诺克游戏对学校作业来说不会太难。我严重低估了。Flash AS3斯诺克游戏

我试图让cueB​​all MovieClip移动到鼠标点击舞台的点。

到目前为止,我已经让cueB​​all移动到鼠标点击的位置,但我需要它继续前进(除非阻塞)。

我想我需要以某种方式计算cueBall MovieClip和鼠标之间的角度,然后告诉MovieClip开始朝那个方向移动。

对此提出建议?这可能是简单的,我敢打赌...

在此先感谢。

addEventListener(Event.ENTER_FRAME, gameSetup); 

var VelocityX; 
var VelocityY; 

var speed = 1; 

var shootCount = 0; 

var mouseXPos; 
var mouseYPos; 

function gameSetup(e:Event) { 
    removeEventListener(Event.ENTER_FRAME, gameSetup); 
    addEventListener(Event.ENTER_FRAME, aim); 
    addEventListener(Event.ENTER_FRAME, shoot); 
} 

function aim(e:Event) { 
    cueStick.x = cueBall.x; 
    cueStick.y = cueBall.y; 

    cueStick.rotation = (Math.atan2(mouseY-cueStick.y, mouseX-cueStick.x))*(180/Math.PI); 

    if (mouseX > 25.5 && mouseX < 614.5) { 
     aimBall.visible = true; 
     aimBall.x = mouseX; 
    } else if (mouseX < 25.5) { 
     aimBall.x = 25.5; 
    } else if (mouseX > 614.5) { 
     aimBall.x = 614.5; 
    } 

    if (mouseY > 25.5 && mouseY < 294.5) { 
     aimBall.visible = true; 
     aimBall.y = mouseY; 
    } else if (mouseY < 25.5) { 
     aimBall.y = 25.5; 
    } else if (mouseY > 294.5) { 
     aimBall.y = 294.5; 
    } 

    if (mouseX > 0 && mouseX < 640 && mouseY > 0 && mouseY < 320) { 
     Mouse.hide(); 
    } else { 
     Mouse.show(); 
    } 

    addEventListener(MouseEvent.MOUSE_DOWN, drawCue); 
} 

function drawCue(e:MouseEvent) { 
    removeEventListener(Event.ENTER_FRAME, aim); 

    addEventListener(MouseEvent.MOUSE_UP, shotAnim); 
} 

function shotAnim(e:MouseEvent) { 
    mouseXPos = mouseX; 
    mouseYPos = mouseY; 
    cueStick.rotation = (Math.atan2(mouseYPos-cueStick.y, mouseXPos-cueStick.x))*(180/Math.PI); 

    VelocityX = Math.cos(mouseX-cueBall.x) * speed; 
    VelocityY = Math.sin(mouseY-cueBall.y) * speed; 

    cueStick.gotoAndPlay(2); 
} 

function shoot(e:Event) { 
    if (shootCount == 1) { 
     cueBall.x += VelocityX; 
     cueBall.y += VelocityY; 
     trace(VelocityX); 
     trace(VelocityY); 
     cueStick.visible = false; 
    } else { 
     cueStick.visible = true; 
    } 
} 
+0

你可能需要像Box2DFlash这样的物理引擎:http://www.box2dflash.org/docs/ – Bolu

+0

是的,我认为你应该选择一些没有物理的东西。 – apscience

+0

谢谢,@Bolu。我会看看Box2DFlash。 – Joel

回答

0

如果我理解你的权利,你已经拥有它设置,使点击鼠标时,皮球瞬间移动到鼠标的位置。

你想要的是让球在一段时间内移动到鼠标的位置。

为此,您将使用一种名为EnterFrame事件。 EnterFrame每帧调用一个函数,您需要使球顺利滚动到鼠标。

addEventListener(Event.ENTER_FRAME,update); 
function update(event:Event) { 
    // move the ball a little bit toward the mouse 
} 

然后,您需要确定球需要滚动的方向。你将用三角函数做到这一点。在你的OnClick处理器中,写下如下内容:

VelocityX = Math.cos(mouse.x-ball.x) * SPEED; 
VelocityY = Math.sin(mouse.y-ball.y) * SPEED; 

然后,每帧,移动球的那个数量。

addEventListener(Event.ENTER_FRAME,update); 
function update(event:Event) { 
    ball.x += VelocityX; 
    ball.y += VelocityY; 
} 

希望有帮助!

+0

感谢您的解释,我相信这是正确的做法,对我来说它确实是有道理的,但是每当我“射击”球时,它就会朝一个看似随机的方向前进,我将用我目前正在运行的代码也许我错过了一些东西...... – Joel