[AS3]Столкновение со стенами с использованием hitTestObject

Так что сейчас я пытаюсь сделать игру, которая почти похожа на лабиринт. Проблема заключается в столкновении со стеной: как только персонаж ударяется о стену, я больше не могу его вытащить, он «застревает», независимо от того, в каком направлении я пытаюсь направить его после столкновения. Одно из решений, о котором я думал, будет заключаться в том, чтобы всякий раз, когда персонаж ударяется о стену, «поддерживать его», чтобы больше не обнаруживалось столкновение. Однако, когда я это делаю, он странным образом проходит сквозь стену. Вот мой код, чтобы вы, ребята, могли понять, что я делаю:

function keyPressed(event:KeyboardEvent):void
{

    if (event.keyCode == Keyboard.LEFT)
    {
       leftArrow = true;
       if(char.hitTestObject(test))
       {
           leftHit= true;
       } else { 
           leftHit = false;
       }
    }
    if (event.keyCode == Keyboard.RIGHT)
    {
       rightArrow = true;
       if(char.hitTestObject(test))
       {
           rightHit= true;
       } else { 
           rightHit = false;
       }
    }


}

function keyReleased(event:KeyboardEvent):void 
{

    if (event.keyCode == Keyboard.LEFT) 
    {
        leftArrow = false;
    }
    if (event.keyCode == Keyboard.RIGHT)
    {
       rightArrow = false;
    }

}

function walking(event:Event):void {
    if (rightArrow) {
        if(rightHit)
            char.x -= speed;
        else
            char.x += speed;    
    }

    if (leftArrow) {
        if(leftHit)
            char.x += speed;
        else
            char.x -= speed;
    }
}

Большую часть этого кода я на самом деле получил от другого человека, задавшего тот же вопрос. Даже делая то, что было предложено в другой теме, проблема все равно остается. Большое спасибо за любую помощь!


person theJuls    schedule 22.12.2012    source источник
comment
Постоянна ли ваша скорость от кадра к кадру? Или это основано на времени, прошедшем с момента последнего кадра?   -  person prototypical    schedule 22.12.2012
comment
это последовательный кадр к кадру. Это в основном константа, и я оставил ее значение равным 10.   -  person theJuls    schedule 23.12.2012


Ответы (1)


В соответствии с просьбой, вот мое решение:

 if (rightArrow) {
                if (!test.hitTestPoint(MovieClip(root).char.x+speed, MovieClip(root).char.y, true))
                {
                    MovieClip(root).char.x += speed;    
                    x = x-speed; //moving the background
                }
            }

            if (leftArrow) {
                if (!test.hitTestPoint(MovieClip(root).char.x-speed, MovieClip(root).char.y, true))
                {
                    MovieClip(root).char.x -= speed;
                    x = x+speed; //moving the background
                }
            }
            if (upArrow) {
                if (!test.hitTestPoint(MovieClip(root).char.x, MovieClip(root).char.y-speed, true))
                {
                    MovieClip(root).char.y -= speed;    
                    y = y+speed; //moving the background
                }
            }

            if (downArrow) {
                if (!test.hitTestPoint(MovieClip(root).char.x, MovieClip(root).char.y+speed, true))
                {
                    MovieClip(root).char.y += speed;
                    y = y-speed; //moving the background
                }
            }

Это было давно, поэтому некоторые из этих вещей я действительно не помню, но из того, что я вижу, я проверяю, не приведет ли добавление скорости моего персонажа к столкновению со стеной. Если это происходит, я не перемещаю персонажа, даже если мне кажется, что у меня достаточно места. Я думаю, что это довольно много.

Надеюсь, поможет.

person theJuls    schedule 20.05.2014