Flash AS3 Snooker Game - PullRequest
       1

Flash AS3 Snooker Game

0 голосов
/ 24 ноября 2011

Итак, я абсолютно бесполезен во Flash и тупо думал, что создание игры в снукер не будет слишком сложным для школьного задания.Я сильно недооценил.

Я пытаюсь заставить cueBall MovieClip двигаться к точке, где Мышь щелкает по сцене.

Пока что я заставил cueBall переместиться к точке, гдеМышь щелкнула, но мне нужно, чтобы она продолжала движение (если не заблокировано).

Я думаю, мне нужно как-то рассчитать угол между мувиклипом cueBall и мышью, а затем сказать мувиклипу начать движение в этом направлении.1007 *

Предложения?Наверное, что-то простое, держу пари ...

Заранее спасибо.

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 голосов
/ 24 ноября 2011

Если я вас правильно понял, у вас уже есть настройка, чтобы при щелчке мыши шарик телепортировался в местоположение мыши.

Вы хотите, чтобы мяч перемещался в положение мыши в течение определенного периода времени.

Для этого вы будете использовать то, что называется событием 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 голосов
/ 24 ноября 2011

Может быть, этот пример полезен для вас: http://www.emanueleferonato.com/2008/01/05/complete-flash-pool-game-with-highscores/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...