Отскок Hit Test

Я пытаюсь сделать что-то вроде игры с воздушными шарами для флеш-игры. У меня есть потолок в верхней части экрана, поэтому, когда игрок ударяется о него, он должен отскакивать от него. Проблема в том, что я не знаю, как это сделать. Вот код.

Я возился с числами. В переменной upBumping, в которой заключается проблема, я хотел, чтобы персонаж отскакивал вниз после удара, но он делает это только один раз. После этого он просто проходит через потолок. Может, я ошибаюсь?

//gravity and stuff
var gravity:Number = 0.3;
var fall:Number = 0.3;
var downBumping:Boolean = false;
var upBumping:Boolean = false;

//direction I guess
var leftKeyDown:Boolean = false;
var upKeyDown:Boolean = false;
var rightKeyDown:Boolean = false;
var spaceKeyDown:Boolean = false;

//character movement ya'll
var mainSpeed:Number = 6;

stage.addEventListener(Event.ENTER_FRAME, game);
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);
stage.addEventListener(KeyboardEvent.KEY_UP, keyUpHandler);

function game(e:Event): void{

//if certain keys are down then move dat fool
    if(leftKeyDown){
        Monkey.x -= mainSpeed;
    }
    if(rightKeyDown){
        Monkey.x += mainSpeed;
    }
    if(upKeyDown){

        fall = fall-0.9;
        gravity = 0.3;
    }
    if(Floor.hitTestObject(Monkey)){
        downBumping = true;
        trace("downBumping");
    }
    if(Ceiling.hitTestObject(Monkey)){
        upBumping = true;
        trace("upBumping");
        trace(Monkey.y);
    }
    if(upBumping){
        Monkey.y += 20;
    }
    Monkey.y = Monkey.y+fall;
    gravity = gravity*1.0;
    fall = fall+gravity;

}

person Bindlestick    schedule 24.11.2012    source источник
comment
Это очень широкий вопрос, и такие вопросы обычно не очень приветствуются в SO. Если вы действительно хотите создать свой собственный физический движок, вам нужно копнуть глубже, чем hitTestObject. Вы также можете использовать любой из физических движков, доступных для AS3, например box2dflash.sourceforge.net   -  person Pier    schedule 25.11.2012
comment
@ Пьер: Я с уважением не согласен. Существует простой фрагмент кода, который иллюстрирует, что хочет делать Биндлстик, а для простой игры физический движок часто не нужен.   -  person apscience    schedule 25.11.2012
comment
Полагаю, это субъективный вопрос. Вот почему я не проголосовал (и не буду) голосовать против этого вопроса. ;)   -  person Pier    schedule 25.11.2012


Ответы (1)


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

function game(e:Event):void {
    if(jumping){
        yVelocity += 0.1; //gravity
        Monkey.y += yVelocity;
        if(Floor.hitTestObject(Monkey)){
            jumping = false;
            while(Floor.hitTestObject(Monkey)){
                y--;
            }
        }
        if(Ceiling.hitTestObject(Monkey)){
            yVelocity = 0;
            while(Ceiling.hitTestObject(Monkey)){
                y++;
            }
        }
    }
    if(upKeyDown && !jumping){
        jumping = true;
        yVelocity = -3;
    }
}

Очевидно, объявите переменные, используемые в этом примере.

person apscience    schedule 25.11.2012
comment
Спасибо, gladoscc. Заменяю ли я прыжки и yVelocity на свои переменные силы тяжести и падения? - person Bindlestick; 25.11.2012