Flash AS3斯诺克游戏

时间:2011-11-24 12:47:23

标签: actionscript-3

所以,我在Flash中毫无用处,并且愚蠢地认为创建一个斯诺克游戏对学校作业来说并不算太难。我严重低估了。

我正在尝试让cueB​​all MovieClip移动到Mouse点击舞台的位置。

到目前为止,我已经让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;
    }
}

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分: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;
}

希望有所帮助!