2

迷路ゲーム制作中。左キーを押すと、ムービークリップ (文字) が左に 90 度回転します。

間違っている場合は訂正してください。ただし、このコードを使用できると思いました。

char.scaleX *= -1;

ただし、最も重要なことは、キャラクターが迷路の壁を通り抜けないことです。そして、それが上記のコードを実装するための私の問題だと思います。ここに入れるとうまく動かないので;

    if(!mazehit) {

                    char.y += speed;
                    char.scaleX *= -1;


                }

私の質問は、ムービークリップをフリップするコードをどこに置く必要があるかということです。

var leftArrow, rightArrow, upArrow, downArrow:Boolean;
var speed:Number = 4;
var charRadius:Number = 10;

stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressed);
stage.addEventListener(KeyboardEvent.KEY_UP, keyReleased);
stage.addEventListener(Event.ENTER_FRAME, everyFrame);

function keyPressed(event:KeyboardEvent):void {
    if (event.keyCode == Keyboard.LEFT) {
        leftArrow = true;
    }
    if (event.keyCode == Keyboard.RIGHT) {
        rightArrow = true;
    }
    if (event.keyCode == Keyboard.UP) {
        upArrow = true;
    }
    if (event.keyCode == Keyboard.DOWN) {
        downArrow = true;
    }
}

function keyReleased(event:KeyboardEvent):void {
    if (event.keyCode == Keyboard.LEFT) {
        leftArrow = false;
    }
    if (event.keyCode == Keyboard.RIGHT) {
        rightArrow = false;
    }
    if (event.keyCode == Keyboard.UP) {
        upArrow = false;
    }
    if (event.keyCode == Keyboard.DOWN) {
        downArrow = false;
    }
}

function everyFrame(event:Event):void {
    var mazehit:Boolean = false;
    if (leftArrow) {
        for(var i:int = 0; i < speed; i++) {
            if(bounds.hitTestPoint(char.x - charRadius - i, char.y, true)) {


                mazehit = true;
                break;
            }
        }
        if(!mazehit) {

            char.x -= speed;




        }

    } else if (rightArrow) {
        for(var j:int = 0; j < speed; j++) {
            if(bounds.hitTestPoint(char.x + charRadius + j, char.y, true)) {

                mazehit = true;
                break;
            }
        }
        if(!mazehit) {

            char.x += speed;
        }
    } else if (upArrow) {
        for(var k:int = 0; k < speed; k++) {
            if(bounds.hitTestPoint(char.x, char.y - charRadius - k, true)) {

                mazehit = true;
                break;
            }
        }
        if(!mazehit) {
            char.y -= speed;
        }

    } else if (downArrow) {

        for(var m:int = 0; m < speed; m++) {
            if(bounds.hitTestPoint(char.x, char.y + charRadius + m, true)) {

                mazehit = true;
                break;
            }
        }
        if(!mazehit) {

            char.y += speed;


        }
    }
}

お時間をいただきありがとうございます

4

1 に答える 1

3

速度に応じて方向を更新します。

char.scaleX = (speed > 0) ? 1 : -1;

または、押されたキーによって:

if(keyLeft && !keyRight)
{
    char.scaleX = -1;
}
else if(keyRight && !keyLeft)
{
    char.scaleX = 1;
}
else
{
    // keep current direction
}
于 2011-10-05T10:46:50.213 に答える