0

どこでも検索しましたが、この質問に対する答えが見つかりません。説明するために最善を尽くします。

私のライブラリには、'Bluknife' と 'cat' (RPG ゲームです) の 2 つのムービークリップがあります。これらのムービークリップは両方とも、同じ名前の as3 クラスにリンクされています。

ドキュメント クラスに次のコードを含めることで、これらのアイテムの両方をステージに追加できることがわかっています。

var knife:BluKnife = new BluKnife();
stage.addChild(knife);

knife.x = stage.stageWidth / 2;
knife.y = stage.stageHeight / 2;

var ct:cat = new cat();
stage.addChild(ct);

ct.x = stage.stageWidth / 2;
ct.y = stage.stageHeight / 2;

ただし、これらすべてをドキュメント クラスに含めたくないので、これらすべてをステージに呼び出すために使用する別のクラスを作成し、次のように名前を付けましたcallitems

package 
{

    import flash.display.MovieClip;

    import flash.display.MovieClip;
    import flash.display.Stage;


    public class callitems extends MovieClip
    {


        public function callitems()
        {
            var knife:BluKnife = new BluKnife();

            stage.addChild(knife);

            knife.x = stage.stageWidth / 2;
            knife.y = stage.stageHeight / 2;

            var ct:cat = new cat();

            stage.addChild(ct);

            ct.x = stage.stageWidth / 2;
            ct.y = stage.stageHeight / 2;
        }

    }

}

callitemsドキュメント クラスからクラスを呼び出すにはどうすればよいのでしょうか。callitemsのインスタンスを作成し、ドキュメント クラスからステージに追加するなど、いくつかのことを試しました(これはうまくいきませんでした)。関数は次のとおりです。

public function Engine()
        {
            var calling:callitems = new callitems();
            stage.addChild(calling);

        }

次のエラーが発生しました: TypeError: エラー #1009: null オブジェクト参照のプロパティまたはメソッドにアクセスできません。callitems() で Engine() で

私のドキュメントクラスの名前はEngine

4

1 に答える 1

1

まず、CallItems(ActionScript のクラス名はキャメル ケースで頭文字を大文字にする必要があることに注意してください) を作成するときに、使用するクラスがインスタンスCallItemsを作成するクラスにコンパイルされないという誤解があります。CallItemsクラスによって直接参照されるすべてのクラスが使用するすべてがコンパイルされます。

これを解決するには、インターフェイスにプログラミングし、ドキュメント クラスにインターフェイスのみを認識させる必要があります。ドキュメント クラスに実装への参照を持たせずにインターフェイス型の変数を設定する方法は 2 つあります。

  1. 項目を IDE のステージ上に配置し、使用した変数に一致するインスタンス名を付けて、インターフェイスを実装する基本クラスを割り当てます。Class は swf で使用されるため、swf にコンパイルされますが、actionscript コードはそれを直接認識しないことに注意してください。
  2. 外部 SWF を読み込みます。実装は、他の swf にコンパイルされます。

さて、あなたの実際の問題に。インスタンスCallItemsは、それ自体ではなく、ステージに追加されています。まだステージに追加されていないため (そして、Engineコードを使用してすべてを作成および追加するという面倒で退屈なプロセスを経る場合は、ステージに追加するのではなく、それ自体に追加することをお勧めします)。

表示オブジェクトは、表示リストにある何かに追加されるまで、ステージへの参照を持ちません。

を追加する理由を検討することもできます。これは、 が作成したものを既にステージに追加callingEngineていると思われるためですcalling(ただし、ステージへの参照がない場合を除きます)。

于 2013-05-08T19:01:33.307 に答える