0

だから私は現在、迷路のようなゲームをしようとしています。問題は壁の衝突にあります。キャラクターが壁にぶつかると、私は彼を追い出すことができなくなり、衝突後にどの方向に連れて行こうとしても、彼は「スタック」します。私が考えていた解決策の1つは、キャラクターが壁にぶつかるたびに「バックアップ」して、衝突が検出されないようにすることでした。しかし、私がそうすると、彼は奇妙な方法で壁を通り抜けます。これが私のコードですので、皆さんは私が何をしているのかを知ることができます:

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

このコードの大部分は、同じ質問をしている別の人から実際に得たものです。他のトピックで提案されたことを実行しても、問題はまだ残っています。助けてくれてありがとう!

4

1 に答える 1

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

久しぶりなのでよく覚えていない部分もあるのですが、自分のキャラクターの速度を足すと壁にぶつかるかどうかを確認しています。そうなると、余裕ができたように見えてもキャラクターを動かしません。それくらいだと思います。

それが役に立てば幸い。

于 2014-05-20T15:08:16.510 に答える