0

Button シンボルを作成し、Export for ActionScriptクラス名「theButton」でエクスポートしました。

オブジェクトがあり、以下のようにコンストラクターでそのボタンを作成したいと思いmyObjます:

public class myObj extends Sprite {
        private var myBtn:theButton = new theButton();

        public function myObj() {
            x = Math.floor(Math.random() * 300) + 50;
            y = Math.floor(Math.random() * 300) + 50;
            addChild(myBtn);
        }
        public function getXPos():uint {
            return x;
        }
    }

myObjクラスの配列を作成しようとしていますgetXPos()が、各ボタンをクリックすると次のようになります。

var myArray:Array = new Array();
myArray[0] = new myObj();

myArray[0].addEventListener(MouseEvent.CLICK, Clicked);

addChild(myArray[0]);

function Clicked(evt:MouseEvent):void {
    var xPos1:uint = myObj(evt.target).getXPos();
    trace("Position is in : " + xPos1);
}

ボタンをクリックすると、画面に次のエラーが表示されます。

Type Coercion failed: cannot convert theButton@2c9dcf99 to myObj.

私が間違っていることを教えてください。

4

1 に答える 1

2

evt.targetクリックされた表示オブジェクトへの参照が含まれます。これは、実際には myObj クラス内の myBtn です (クリックできる唯一の可視グラフィックです)。

これを解決するには 2 つの方法があります。

  1. myObj() コンストラクター内で this.mouseChildren = false を設定します。このようにして、myObj の子表示オブジェクトのクリックは myObj のクリックとして「カウント」され、evt.target は myObj のインスタンスへの参照になります。

  2. evt.target の代わりに evt.currentTarget を使用します。これは、クリックしたインスタンスではなく、イベント リスナーをアタッチしたインスタンスです (ほとんどの場合、これが実際に必要です)。

于 2013-08-24T19:19:44.400 に答える