0

私はActionScriptを初めて使用し、最初のアプリケーションを作成しようとしています。私はメインクラスを持っています-のサブクラスSprite。もう1つのクラスは、キーボードのキーを押すなど、いくつかのevntを管理する必要があります。これが初期化です:

private var controller:GameObjectController;
...
controller = new GameObjectController(this);

これがcontroller:GameObjectControllerそれ自体です:

public class GameObjectController extends InteractiveObject
{
    var textField:TextField;

    public function GameObjectController(mainSprite: Sprite)
    {
    addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);

    textField = new TextField();
    textField.text = "Hello, World";
    mainSprite.addChild(textField);
    }

    private function onKeyDown(event: KeyboardEvent):void
    {
    textField.text = event.keyCode.toString();
    }

}

しかし、これを実行しようとすると、エラーが発生します。

ArgumentError:エラー#2012:クラスGameObjectController$を作成できません。

私は何が間違っているのですか?

4

3 に答える 3

3

ドキュメントから:InteractiveObject

InteractiveObjectクラス自体には、コンテンツを画面にレンダリングするためのAPIは含まれていません。InteractiveObjectクラスのカスタムサブクラスを作成するには、Sprite、SimpleButton、TextField、MovieClipクラスなど、画面上にコンテンツをレンダリングするためのAPIを持つサブクラスの1つを拡張します。

したがって、代わりにSpriteをサブクラス化して、問題が解決するかどうかを確認することをお勧めします。

于 2012-12-17T06:14:04.167 に答える
1

まず、InteractiveObjectを拡張しないでください。APIが言うように:

InteractiveObjectクラス自体には、コンテンツを画面にレンダリングするためのAPIは含まれていません。InteractiveObjectクラスのカスタムサブクラスを作成するには、Sprite、SimpleButton、TextField、MovieClipクラスなど、画面上にコンテンツをレンダリングするためのAPIを持つサブクラスの1つを拡張します。

したがって、代わりに(eg)を使用します。

public class GameObjectController extends Sprite
{
    ....
}

次に、コンストラクターの引数は拡張クラスと同じである必要があります。つまり、表示クラスの場合、引数はゼロです。

于 2012-12-17T06:15:09.003 に答える
1

flash.display.InteractiveObjectは、サブクラス化できない抽象クラスです。代わりに、flash.display.Spriteから拡張してください。

Spriteをインポートし、コードをパッケージに入れることを忘れないでください。

package
{
    import flash.display.Sprite;

    public class GameObjectController extends Sprite
    {
        var textField:TextField;

        public function GameObjectController(mainSprite: Sprite)
        {
            addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);

            textField = new TextField();
            textField.text = "Hello, World";
            mainSprite.addChild(textField);
        }

        private function onKeyDown(event: KeyboardEvent):void
        {
            textField.text = event.keyCode.toString();
        }
    }
}
于 2012-12-17T06:16:48.707 に答える