Как заставить объект сбросить мою игру? - PullRequest
1 голос
/ 30 декабря 2011

Я студент, работающий над проектом со вспышкой. Я просто пытаюсь сделать флэш-игру, используя Actionscript 3 в Adobe Flash CS5. Все работает нормально, я могу ходить и прыгать, но я хочу, чтобы игра перезапускалась, если Главный герой касается объекта и умирает (как шипы в яме). У меня есть главное меню в кадре 1 и первый уровень в кадре 2. Главный герой называется player_mc, а объект, который его убивает, называется «умирает». Помощь и советы очень ценятся.

Код:

//The Code For The Character (Player_mc)
import flash.events.KeyboardEvent;
import flash.events.Event;

var KeyThatIsPressed:uint;
var rightKeyIsDown:Boolean = false;
var leftKeyIsDown:Boolean = false;
var upKeyIsDown:Boolean = false;
var downKeyIsDown:Boolean = false;

var playerSpeed:Number = 20;
var gravity:Number = 1;
var yVelocity:Number = 0;
var canJump:Boolean = false;
var canDoubleJump:Boolean = false;

stage.addEventListener(KeyboardEvent.KEY_DOWN, PressAKey);
stage.addEventListener(KeyboardEvent.KEY_UP, ReleaseAKey);


//This two functions cllapsed is the keybindings that the game uses
function PressAKey(event:KeyboardEvent):void
{
    if(event.keyCode == Keyboard.D)
    {
        rightKeyIsDown = true;
    }
    if(event.keyCode == Keyboard.A)
    {
        leftKeyIsDown = true;
    }
    if(event.keyCode == Keyboard.SPACE)
    {
        upKeyIsDown = true;
    }
    if(event.keyCode == Keyboard.S)
    {
        downKeyIsDown = true;
    }
}

function ReleaseAKey(event:KeyboardEvent):void
{
    if(event.keyCode == Keyboard.D)
    {
        rightKeyIsDown = false;
    }
    if(event.keyCode == Keyboard.A)
    {
        leftKeyIsDown = false;
    }
    if(event.keyCode == Keyboard.SPACE)
    {
        upKeyIsDown = false;
    }
    if(event.keyCode == Keyboard.S)
    {
        downKeyIsDown = false;
    }
}

//Player animations
player_mc.addEventListener(Event.ENTER_FRAME, moveThePlayer);

function moveThePlayer(event:Event):void 
{
    if(!canJump || rightKeyIsDown && !canJump || leftKeyIsDown && !canJump)
    {
        player_mc.gotoAndStop(3);
    }
    if(!upKeyIsDown && !rightKeyIsDown && !leftKeyIsDown && canJump)
    {
        player_mc.gotoAndStop(1);
    }
    if(rightKeyIsDown && canJump || leftKeyIsDown && canJump)
    {
        player_mc.gotoAndStop(2);
    }
    //Animation stops here

    if(rightKeyIsDown) 
    {
        floor_mc.x -= playerSpeed;
        dies.x -= playerSpeed;
        player_mc.scaleX = 0.3;
    }
    if(leftKeyIsDown) 
    {
        floor_mc.x += playerSpeed;
        dies.x += playerSpeed;
        player_mc.scaleX = -0.3;
    }
    if(upKeyIsDown && canJump)
    {
        yVelocity = -18;
        canJump = false;
        canDoubleJump = true;
    }
    if(upKeyIsDown && canDoubleJump && yVelocity > -2)
    {
        yVelocity =-13;
        canDoubleJump = false;
    }
    if(!rightKeyIsDown && !leftKeyIsDown && !upKeyIsDown)
    {
        player_mc.gotoAndStop(1);
    }
    yVelocity +=gravity

    if(! floor_mc.hitTestPoint(player_mc.x, player_mc.y, true))
    {
        player_mc.y+=yVelocity;
    }
    if(yVelocity > 20)
    {
        yVelocity =20;
    }

    for (var i:int = 0; i<10; i++)
    {
        if(floor_mc.hitTestPoint(player_mc.x, player_mc.y, true))
        {
            player_mc.y--;
            yVelocity = 0;
            canJump = true;
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 31 декабря 2011

Хорошей привычкой, которую вы должны выработать, является наличие endGame() или аналогичного метода, который вы обновляете при работе над игрой.

Например:

function endGame():void
{
    // nothing here yet
}

Теперь давайте скажемВы создаете игрока.Игрок изначально настроен так:

player.health = 100;
player.dead = false;

Вы захотите обновить свой метод endGame(), чтобы отразить это.

function endGame():void
{
    player.health = 100;
    player.dead = false;
}

У вас есть некоторые переменные, связанные с игровым движкомсам по себе?

var score:int = 0;
var lives:int = 3;

Добавьте их тоже:

function endGame():void
{
    player.health = 100;
    player.dead = false;

    score = 0;
    lives = 3;
}

Теперь endGame() должен вернуть игру в исходное состояние.Гораздо проще работать таким образом (когда вы кодируете игру), чем оставлять ее до последнего и пытаться убедиться, что вы закрыли все, что маловероятно.

0 голосов
/ 30 декабря 2011

Если я правильно понимаю, когда вы умрете, вы захотите перезапустить уровень. Чтобы сделать это, вы можете сохранить все свои исходные переменные, такие как положение игрока, положение на полу и т. Д., В массиве, а затем при смерти восстановить эти переменные в соответствующем объекте. Однако, когда вы усложняетесь и получаете много-много объектов, это может стать хитрым.

Более простое решение состоит в том, чтобы отображать экран смерти некоторых видов на другом кадре (давайте назовем его кадром 3), когда вы ударяете по умирающему объекту, и на этом экране смерти, когда вы нажимаете кнопку перезагрузки или после некоторой задержки, затем он возвращается к кадру 2 и перезапускает уровень.

Пример:

Поместите это в функцию moveThePlayer:

if(dies.hitTestPoint(player_mc.x, player_mc.y, true))
{
    // remove all the event listeners
    player_mc.removeEventListener(Event.ENTER_FRAME, moveThePlayer);
    stage.removeEventListener(KeyboardEvent.KEY_DOWN, PressAKey);
    stage.removeEventListener(KeyboardEvent.KEY_UP, ReleaseAKey);

    gotoAndStop(3); // this has your "dead" screen on it.
}

А в кадре 3 есть что-то вроде:

import flash.events.MouseEvent;

retry_button.addEventListener(MouseEvent.CLICK, retry);

function retry(e:MouseEvent) {
    retry_button.removeEventListener(MouseEvent.CLICK, retry);

    // back to the level
    gotoAndStop(2);
}

Вы также можете сделать что-то вроде сохранения переменной, к которой вы хотите вернуться, чтобы у вас был один кадр повтора, который может перейти на любой уровень, на котором вы только что находились.

...