[AS3]使用hitTestObject与墙壁碰撞

时间:2012-12-22 17:20:46

标签: actionscript-3 flash collision-detection collision maze

所以我现在正在尝试做一个几乎像迷宫的游戏。 问题出在墙壁碰撞上,一旦角色碰到墙壁,我就不能再把他弄出来了,不管碰撞后我试图抓住他的方向,他都会“卡住”。 我想到的解决方案之一就是每当角色撞到墙上时,“支持他”,这样就不会再发现碰撞了。然而,当我这样做时,他以一种奇怪的方式穿过墙壁。 这是我的代码,所以你们可以知道我在做什么:

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;
    }
}

这段代码的很大一部分我实际上是从另一个人那里得到了同样的问题。即使按照其他主题的建议,问题仍然存在。 非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

根据要求,这是我的解决方案:

 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
                }
            }

已经有一段时间了,所以有些东西我真的不记得了,但从我所看到的,我检查是否加上我的角色速度会让它与墙碰撞。如果发生这种情况,即使我看似有足够的空间,我也不会移动角色。我认为这就是它。

希望它有所帮助。