0

ここで、私が完全に理解していないことがいくつかあります。MovieClip を拡張していくつかのカスタム プロパティを提供し、作成された MovieClip 内に幾何学的形状を作成するカスタム クラスを作成しました。

package com.hyatt
{
import flash.display.*;
import flash.geom.*;
public class mapPin extends MovieClip
{

    public var spirit:String;
    public var callName:String;
    public var hotelName:String;
    public var city:String;
    public var s:String;
    public var zip:String;
    public var country:String;
    public var brand:String;
    public var featured:Boolean;
    public var horizon:Boolean;
    private var _mc1:MovieClip = new MovieClip();

    public function mapPin(_brand:String)
    {
        brand = _brand;
        switch (_brand)
        {
            case "Andaz":
                    pinCircle(0xff0000);
                    break;
            case "Grand Hyatt":
                    pinCircle(0x0000ff);
                    break;
            case "Hyatt":
                    pinCircle(0x4600f0);
                    break;
        }
    }

    private function pinCircle(color:uint):void
    {
        _mc1.graphics.beginFill(color);
        _mc1.graphics.drawCircle(0,0,20);
        this.addChild(_mc1);
        _mc1.graphics.endFill();
    }
}

}

次に、ステージ上のコンテナー ムービークリップに mapPin クラスのインスタンスをいくつか追加し、そのコンテナー クリップにイベント リスナーを追加します。

var myTest1:mapPin = new mapPin("Andaz");
myTest1.brand = "Andaz";
container_mc.addChild(myTest1);
myTest1.name = "myTest1" //this is added purely for testing the "instance xx", same result
myTest.x = 100;
myTest.y = 100;

var myTest2:mapPin = new mapPin("Hyatt");
container_mc.addChild(myTest2);
myTest2.brand = "Hyatt";
myTest2.x = 400;
myTest2.y = 400;

container_mc.addEventListener(MouseEvent.CLICK, pinClicked);

最後に、クリックされた mapPin のプロパティ (これまでに設定されたのは「ブランド」のみ) にアクセスできるようにしようとしています。

function pinClicked(e:MouseEvent):void
{
    trace(e.target.name); // traces "instance xx" instead of "myTest1"
trace(e.target.brand); // traces "undefined"
}

mapPin インスタンスを追加して、それらの x と y を調整できますが、「ブランド」などのカスタム クラス プロパティを参照することはできず、それらの名前は汎用インスタンス名になります。私は何が欠けていますか?これらのアイテムが 500 以上追加される予定であり、ユーザーのクリックに基づいてそれらから情報を取得できるようにしたいと考えています。

4

2 に答える 2

2

確かに mapPin クラスを確認する必要がありますが、イベントをディスパッチしている DisplayObject は mapPin の子であると思います。

これを修正するには、mapPin クラス コンストラクター内に次の行を追加します。

mouseChildren = false;

これにより、子がクリック/ディスパッチ マウス イベントを受信しないように指定されます。

于 2013-04-18T20:20:25.960 に答える
0

currentTarget はイベントをディスパッチした最新のオブジェクトであり、 target は最初にイベントをディスパッチしたオブジェクトです

そうではありません。AS3 doc は次のように述べています。

currentTarget : イベント リスナーで Event オブジェクトをアクティブに処理しているオブジェクト。たとえば、ユーザーが [OK] ボタンをクリックした場合、現在のターゲットは、そのボタンを含むノード、またはそのイベントのイベント リスナーを登録したその祖先のいずれかになります。

target : イベントのターゲット。このプロパティには、ターゲット ノードが含まれます。たとえば、ユーザーが [OK] ボタンをクリックすると、ターゲット ノードはそのボタンを含む表示リスト ノードになります。

于 2013-04-20T09:51:57.087 に答える