0

十分に単純です。

スプライト オブジェクトを保持するコンテナ クラスがあり、そのスプライトにタッチ リスナーをアタッチする場合、スプライトがタッチされたときにスプライトを含むオブジェクトを取得する信頼できる安価な方法はありますか? スプライトを継承するだけでよいことはわかっていますが、それは私がやりたいことではありません。

それに失敗した場合、それを含むクラス内のSpriteオブジェクトにイベントリスナーを追加すると、触れられたSpriteオブジェクトを保持するコンテナへの参照を取得できるイベントをディスパッチする方法はありますか?

助けてくれてありがとう。

loxxxy への返信:

「保有」と言ったときは、集約の意味でした。例えば:

public class Container 
    {
        [Embed(source = "img1.jpg")] private var img:Class;

        private var sprite:Sprite;
        private var bitmap:Bitmap;

        public function Container() 
        {
            bitmap = new img();
            sprite = new Sprite();
            sprite.addChild(bitmap);
        }

        public function GetSprite():Sprite
        {
            return sprite;
        }

    }

これは完全に合法的なコードです。私がやりたかったのは、Sprite オブジェクトが Container クラスの外部に触れたときに、その Sprite オブジェクトを介して Container クラス内の他のプロパティにアクセスできるようにすることでした。ただし、確実な回避策は次のようなものになると思います。

public class Container extends InteractiveDisplayObject
    {
        [Embed(source = "img1.jpg")] private var img:Class;

        private var bitmap:Bitmap;

        public function Container() 
        {
            bitmap = new img();
this.addChild(bitmap);

        }
    }

次に、Container クラスのタッチ イベントをリッスンすることで、Container クラスの集約オブジェクトにアクセスし、他の DisplayObject クラス (TextField、Sprite など) に完全に拡張できるようにします。

私がこれをやりたいという非常に具体的な理由がありますが、実際の質問には関係ないと思います。テストする時間ができたら、このアプローチを試して、どうなるか見てみます。ありがとう!

4

1 に答える 1

0

この目的のためだけにイベントをディスパッチする必要はありません。

イベントリスナーをコンテナに追加すると、コンテナとスプライトの両方への参照を取得できます。例:

container.addEventListener(MouseEvent.CLICK, container_touched, false, 0, true);

function container_touched(e) { 

    trace(e.target.name);            // Output : sprite
    trace(e.currentTarget.name);     // Output : container
}

編集 :

または、次のような関数を追加して、スプライト イベントを他のユーザーに公開することもできます。

public function registerCallback( callback:Function) {

    var thisRef = this; 

    sprite.addEventListener(MouseEvent.CLICK, function(e) {

         callback(thisRef);

    },false, 0, true);    
}
于 2012-12-08T06:43:04.613 に答える