0

私の完全なコードは import flash.events.KeyboardEvent; です。インポート flash.events.Event;

//init some variables
var speedX = 0;
var speedY = 0;
msg.visible = false;
var curLevel = 2;
var level = new Array();
var flagVar;
var won = false;

//Adding level platforms
for(var i = 0; i < numChildren; i++) {
    if(getChildAt(i) is platform) {
        level.push(getChildAt(i).getRect(this));
    }
    if(getChildAt(i) is flag) { flagVar = getChildAt(i).getRect(this); }
}

//Checking key presses
var kUp     = false;
var kDown   = false;
var kLeft   = false;
var kRight  = false;
var kSpace  = false;

stage.addEventListener(KeyboardEvent.KEY_DOWN, kD);
stage.addEventListener(KeyboardEvent.KEY_UP, kU);

function kD(k:KeyboardEvent) {
    trace("Key down - " + k.keyCode);
    if(k.keyCode == 32) { kSpace    = true; }
    if(k.keyCode == 37 ) { kLeft    = true; }
    if(k.keyCode == 38) { kUp       = true; }
    if(k.keyCode == 39) { kRight    = true; }
}

function kU(k:KeyboardEvent) {
    trace("Key up - " + k.keyCode);
    if(k.keyCode == 32) { kSpace    = false; }
    if(k.keyCode == 37) { kLeft     = false; }
    if(k.keyCode == 38) { kUp       = false; }
    if(k.keyCode == 39) { kRight    = false; }
}

addEventListener(Event.ENTER_FRAME, loopAround);
function loopAround(e:Event) {

    //horizontal movement
    if(kLeft) {
        speedX = -10;
    } else if(kRight) {
        speedX = 10;
    } else {
        speedX *= 0.5;
    }

    player.x += speedX;

    //horizontal collision checks
    for(var i = 0; i < level.length; i++) {
        if(player.getRect(this).intersects(level[i])) {
            if(speedX > 0) {
                player.x = level[i].left - player.width;
            }
            if(speedX < 0) {
                player.x = level[i].right;
            }

            speedX = 0;
        }
    }

    //vertical movement
    speedY += 1;
    player.y += speedY;
    var jumpable = false;

    //Vertical collision
    for(i = 0; i < level.length; i++) {
        if(player.getRect(this).intersects(level[i])) {
            if(speedY > 0) {
                player.y = level[i].top - player.height;
                speedY = 0;
                jumpable = true;
            }
            if(speedY < 0) {
                player.y = level[i].bottom;
                speedY *= -0.5;
            }
        }
    }

     //JUMP!
    if((kUp || kSpace) && jumpable) {
        speedY=-20;
    }

    //Moving camera and other
    this.x = -player.x + (stage.stageWidth/2);
    this.y = -player.y + (stage.stageHeight/2);
    msg.x = player.x - (msg.width/2);
    msg.y = player.y - (msg.height/2);

    //Checking win
    if(player.getRect(this).intersects(flagVar)) {
        msg.visible = true;
        won = true;
    }

    //Check for next level request
    if(kSpace && won) {
        curLevel++;
        gotoAndStop(curLevel);
        won = false;
    }
}

問題のセクションは //Checking key presses var kUp = false; です。var kDown = false; var kLeft = false; var kRight = false; var kSpace = false;

stage.addEventListener(KeyboardEvent.KEY_DOWN, kD);
stage.addEventListener(KeyboardEvent.KEY_UP, kU);

function kD(k:KeyboardEvent) {
    trace("Key down - " + k.keyCode);
    if(k.keyCode == 32) { kSpace    = true; }
    if(k.keyCode == 37 ) { kLeft    = true; }
    if(k.keyCode == 38) { kUp       = true; }
    if(k.keyCode == 39) { kRight    = true; }
}

function kU(k:KeyboardEvent) {
    trace("Key up - " + k.keyCode);
    if(k.keyCode == 32) { kSpace    = false; }
    if(k.keyCode == 37) { kLeft     = false; }
    if(k.keyCode == 38) { kUp       = false; }
    if(k.keyCode == 39) { kRight    = false; }
}

これは昨夜は正常に機能していましたが、今日は新しいキーフレームに移動したところ、機能しなくなりました。エラーは発生しません (デバッグしても)。キャラクターを動かしたり、出力に表示したりしません。

私はまだas3にかなり慣れていないので、どうすればいいのかよくわかりません。

前もって感謝します。

編集:少し遊んだ後、機能しない理由はメニューにあることがわかりました。メニューには 1 つのボタンと 2 つのテキスト要素があり、問題ありません。メニューで使用しているコードは次のとおりです。

import flash.events.MouseEvent;

stop();

var format:TextFormat = new TextFormat();
format.size = 26;
format.bold = true;
playGameButton.setStyle("textFormat", format);

stage.addEventListener(MouseEvent.CLICK, playGame);
function playGame(e:MouseEvent) {
    if(e.target.name == "playGameButton") {
        gotoAndStop(2);
    }
}

私が使用した場合は正常にgotoAndStop(2);動作しますが、他のすべてでは2番目のフレームに移動するだけで、その後は何も機能しません。

編集#2:ifステートメント自体にさらに絞り込みました。

if(e.target == playGameButton)

if(e.target.name == "playGameButton")

どちらも機能しません。if ステートメントをすべて一緒に削除すると、完全に正常に動作します。

4

3 に答える 3

1

この行に問題があるようです

if(getChildAt(i) is platform)

エラー 1067 につながります: タイプ flash.display:MovieClip の値の無関係なタイプ クラスへの暗黙の強制

コードの残りの部分は問題ないようです

于 2015-05-08T16:54:06.930 に答える
0

e.currentTargetの代わりに試してくださいe.targetドキュメントから:

currentTarget:Object[読み取り専用]イベントリスナーでEventオブジェクトをアクティブに処理しているオブジェクト。

target:オブジェクト[読み取り専用]イベントターゲット。

これがあなたの問題であるかどうかはよくわかりませんが、targetvsのcurrentTarget混乱は以前に私を悩ませてきました。

于 2012-07-01T18:14:49.393 に答える
0

ボタンの mouseChildren を無効にしてみてください。

playGameButton.mouseChildren = false;
于 2012-06-30T08:43:54.927 に答える