0

理由はわかりませんが、何らかの理由で、InputEngine クラスに ADDED_TO_STAGE をリッスンさせることができません。

package  Input{
import flash.display.*;
import flash.events.*;
import flash.ui.Keyboard;

public class InputEngine extends Sprite{

    public function InputEngine() {
        addEventListener(Event.ADDED_TO_STAGE, stageAddHandler);
        leftPressed = false;
        rightPressed = false;
        upPressed = false;
        downPressed = false;
    }
    public function stageAddHandler(e:Event)
    {
        trace("worke");
        stage.addEventListener(KeyboardEvent.KEY_DOWN, keyIsPressed, false, 0, true);
        stage.addEventListener(KeyboardEvent.KEY_UP, keyIsReleased, false, 0, true);
    }
    public function keyIsPressed(e:KeyboardEvent)
    {
        switch(e.keyCode)
        {
            case Keyboard.LEFT : leftPressed = true; break;
            case Keyboard.RIGHT : rightPressed = true; break;
            case Keyboard.UP : upPressed = true; break;
            case Keyboard.DOWN : downPressed = true; break;
        }
    }
    public function keyIsReleased(e:KeyboardEvent)
    {
        switch(e.keyCode)
        {
            case Keyboard.LEFT : leftPressed = false; break;
            case Keyboard.RIGHT : rightPressed = false; break;
            case Keyboard.UP : upPressed = false; break;
            case Keyboard.DOWN : downPressed = false; break;
        }
    }
    public var leftPressed:Boolean = new Boolean;
    public var rightPressed:Boolean = new Boolean;
    public var upPressed:Boolean = new Boolean;
    public var downPressed:Boolean = new Boolean;

}

}

これはメインのゲーム ファイルです。

package  {
import Input.InputEngine;
import flash.display.*;
import flash.events.*;

public class System extends Sprite{

    public function System() {
        trace("System created");
        addEventListener(Event.ENTER_FRAME, gameLoop);
        stage.addChild(inputEngine);
        // constructor code
    }
    public function gameLoop(e:Event)
    {
        if(inputEngine.leftPressed == true)
        {
            trace("Left pressed");
        }
    }
    public var inputEngine:InputEngine = new InputEngine();

}

}

何らかの理由で、InputEngine にキーボード リスナーを初期化させることができません。ここで何が間違っていますか?

4

1 に答える 1

0

エラーのコメントに基づく問題は、System クラスのインスタンスが表示リストに追加されていないことです。すべてのコードを確認しないと、役に立ちません。

質問に実行時エラーがあったとは言いませんでした。しかし、実際に inputEngine のインスタンスがあり、物事が「期待」どおりに行われていると仮定すると、問題はSystemクラスのインスタンスがステージに追加されていないことです。そのため…ステージの表示リストにinputEngineが付くことはありません。

于 2013-10-18T05:13:44.293 に答える