这里有一些我不完全理解的事情。我创建了一个自定义类,它扩展了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,虽然我不能引用自定义类属性,如“brand”,它们的名称将成为通用实例名称。我错过了什么?将会有超过500个这样的项目添加,我希望能够根据用户点击从中提取信息。
答案 0 :(得分:2)
我必须确定你的mapPin类,但我认为派遣事件的DisplayObject是mapPin的子节点。
要解决此问题,请在mapPin类构造函数中添加以下行:
mouseChildren = false;
这将指定儿童不应接收点击/发送鼠标事件。
答案 1 :(得分:0)
currentTarget是调度事件的最新对象,target是最初调度它的对象
不是。 AS3 doc说:
currentTarget: 使用事件侦听器主动处理Event对象的对象。例如,如果用户单击“确定”按钮,则当前目标可以是包含该按钮的节点或其已为该事件注册事件侦听器的其祖先之一。
目标:事件目标。此属性包含目标节点。例如,如果用户单击“确定”按钮,则目标节点是包含该按钮的显示列表节点。