Actionscript 3 在单击处理程序中访问.name属性

Actionscript 3 在单击处理程序中访问.name属性,actionscript-3,flash,actionscript,addeventlistener,instances,Actionscript 3,Flash,Actionscript,Addeventlistener,Instances,我试图通过flash+actionscript制作一个简单的卡片匹配游戏,但在分配事件侦听器和名称方面遇到了很大的困难。我已经准备好了所有的卡片生成语句,它们都会出现在我的舞台上,但即使我用newCard.name指定了它们的实例名称,我在跟踪单击时得到的名称在每个按钮上总是“root1”,我也不知道为什么。 package { import flash.display.MovieClip; import flash.events.MouseEvent; public dynamic cla


我试图通过flash+actionscript制作一个简单的卡片匹配游戏,但在分配事件侦听器和名称方面遇到了很大的困难。我已经准备好了所有的卡片生成语句,它们都会出现在我的舞台上,但即使我用newCard.name指定了它们的实例名称,我在跟踪单击时得到的名称在每个按钮上总是“root1”,我也不知道为什么。

package  {
import flash.display.MovieClip;
import flash.events.MouseEvent;

public dynamic class cardGameMain extends MovieClip {

    public function cardGameMain() {
        addCards();
    }
    public function addCards() {
        var lastCard:int;
        for (var i = 1; i < 17; i++) {
            var newCard:MovieClip;
            newCard = new cardBackSymbol();
            newCard.name = "card" + i;
            addChild(newCard);
            newCard.addEventListener(MouseEvent.MOUSE_UP, decideCard);
            if (i == 1 || i == 5 || i == 9 || i == 13) {
                newCard.x = 20;
                if (i == 1) {
                    newCard.y = 20;
                }
                else if (i == 5) {
                    newCard.y = 240;
                }
                else if (i == 9) {
                    newCard.y = 460;
                }
                else if (i == 13) {
                    newCard.y = 680;
                }
                lastCard = 20;
            } else if (i > 1 && i < 5) {
                newCard.x = lastCard + 145;
                newCard.y = 20;
                lastCard = lastCard + 145;
            } else if (i > 5 && i < 9) {
                newCard.x = lastCard + 145;
                newCard.y = 240;
                lastCard = lastCard + 145;
            } else if (i > 9 && i < 13) {
                newCard.x = lastCard + 145;
                newCard.y = 460;
                lastCard = lastCard + 145;
            } else {
                newCard.x = lastCard + 145;
                newCard.y = 680;
                lastCard = lastCard + 145;
            }
            trace(newCard.name + " position is " + newCard.x + ", " + newCard.y);
        }
    }

    public function decideCard(e:MouseEvent):void {
        trace(this.name)
    }
}
包{
导入flash.display.MovieClip;
导入flash.events.MouseEvent;
公共动态类cardGameMain扩展了MovieClip{
公共函数cardGameMain(){
addCards();
}
公共函数addCards(){
var-lastCard:int;
对于(变量i=1;i<17;i++){
var newCard:MovieClip;
newCard=newcardbacksymbol();
newCard.name=“card”+i;
addChild(newCard);
newCard.addEventListener(MouseEvent.MOUSE\u UP,十进制);
如果(i==1 | | i==5 | | i==9 | | i==13){
newCard.x=20;
如果(i==1){
newCard.y=20;
}
else如果(i==5){
newCard.y=240;
}
else如果(i==9){
newCard.y=460;
}
否则如果(i==13){
newCard.y=680;
}
lastCard=20;
}否则如果(i>1&&i<5){
newCard.x=lastCard+145;
newCard.y=20;
lastCard=lastCard+145;
}否则如果(i>5&&i<9){
newCard.x=lastCard+145;
newCard.y=240;
lastCard=lastCard+145;
}否则如果(i>9&&i<13){
newCard.x=lastCard+145;
newCard.y=460;
lastCard=lastCard+145;
}否则{
newCard.x=lastCard+145;
newCard.y=680;
lastCard=lastCard+145;
}
跟踪(newCard.name+“位置为”+newCard.x+,“+newCard.y”);
}
}
公共功能decideCard(e:MouseeEvent):无效{
跟踪(this.name)
}
}
}


在这件事上任何帮助都是非常感激的

您使用的是
this
关键字,它指的是包含类,而不是单击的对象

请尝试以下方法:

public function decideCard(e:MouseEvent):void {
    trace(DisplayObject(e.currentTarget).name)
}

@伦敦药物服务中心非常感谢您!我不得不稍微改变它,用MovieClip替换DisplayObject,它工作得非常好

当我在这里的时候,还是一个简单的问题,最终在decideCard函数中,我将使用这个名称从数组中调用某些东西。如果我这样做,同样的方法会起作用吗?(例如,如果(MovieClip(e.currentTarget).name==card1))@user1801301-Odd,name属性是从DisplayObject继承的,因此它应该可以工作,但不管。。。要回答您的问题,请在decideCard函数中使用该行(假设您在引号中使用“card1”,因为它是您要计算的字符串)