1

GameWorld.as、96 行目 1180: 未定義の可能性のあるメソッド initialize を呼び出します。

IController を実装するコントローラーを GameWorld に追加しています。

addController(new BackgroundController(this));

public function addController(controller:IController):void
{
    controller.initialize();
    controllers.push(controller);
}

public interface IController 
{
    function initialize():void;         //setup the controller
    function getType():String;          //define the controller by a type string
    function update():void;             //perform update actions
    function destroy():void;            //cleanup the controller
}

initialize は IController のメソッドですが、突然未定義になりました

構文エラーが発生せず、コードを動作状態に戻すことができないようです。

何が原因でしょうか?

これが BackgroundController です。

package controller 
{
    import Entity;
    import flash.display.Bitmap;
    import flash.display.Sprite;

    public class BackgroundController implements IController
    {
        private var world:GameWorld;
        private var images:Vector.<Bitmap>;
        private var bgImage:Sprite;

        public function BackgroundController(world:GameWorld)
        {
            this.world = world;
        }

        public function initialize():void
        {
            bgImage = new Sprite();
            images = new Vector.<Bitmap>();

            var ypos:int = 0;

            for (var i:int = 0; i < 3; i++ )
            {
                var tempBmp:Bitmap = new Bitmap(new grasstile(0, 0));
                images.push(tempBmp);
                bgImage.addChild(tempBmp);
                tempBmp.y = ypos;
                ypos += 500;
            }

            GameWorld.lowerLayer.addChild(bgImage);
        }
        public function update():void 
        {
            //update the background tiles
            for (var i:int = 0; i < 3; i++ )
            {
                images[i].y -= world.gameSpeed;
                if (images[i].y < -500 )
                {
                    images[i].y += 1500;
                }
            }
        }

        public function getType():String
        {
            return "Background";
        }

        public function destroy():void 
        {

        }

    }

}
4

3 に答える 3

1

いくつかのグローバル チェック

  • ランタイム共有アセット、複数のファイルを使用していますか? それらをすべてビルドしたことを確認してください。
  • 他のランタイム/ビルド エラーがないことを確認します
  • FDT (どのエディターを使用しますか?) には、「MXML コンパイラーをリセットしてフル ビルドを強制する」という機能があります。これにより、キャッシュがクリアされ、インクリメンタル ビルドではなく、完全な新しいビルドが強制的に実行されます。
  • Flashdevelopでは、ツール>フラッシュツール>クラスパスの再構築を使用する必要があります
  • Flash IDE では、ASO ファイルをクリアする (CS5-) / パブリッシュ キャッシュをクリアする (CS6) ことができます。
  • エディターと関連プロセスを再起動/強制終了して、奇妙なキャッシュの競合がなく、すべての構文チェックが最新であることを確認します。

コードチェック

// make sure it has implemented the IController
trace("controller is IController: "  + (controller is IController) );

と..

// detect what kind of class it really is. Goto that class, check the interface.
trace("controller is : "  + getQualifiedClassName(controller) );

また、他のインターフェースがないことを確認するかIController、すべてのインポートステートメントをチェックして、どこでも正しいインターフェースが使用されていることを確認してください。

于 2012-10-31T08:21:21.253 に答える
1

私も同じ状況に陥りました。

この問題は、パッケージと定義された変数の間の名前衝突の問題が原因であることがわかりました。

したがって、あなたの場合、変更するだけです

public function addController(controller:IController):void
{
    controller.initialize();
    controllers.push(controller);
}

public function addController(controllerImpl:IController):void
{
    controllerImpl.initialize();
    controllers.push(controllerImpl);
}

解決するべきでした。

于 2013-10-13T03:26:23.593 に答える
0

インターフェイスはクラスのルールを定義するだけで、この場合、実装するクラスIControllerにはこれら 4 つのメソッドの定義が含まれている必要があることを示しています。コントローラー クラスで定義された初期化メソッドを実際に持っていますか?

于 2012-10-31T08:00:29.893 に答える