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(它是您可以单击的唯一可见图形)。

有两种方法可以解决这个问题。

  1. 在 myObj() 构造函数中设置 this.mouseChildren = false 。这样,对 myObj 中子显示对象的单击将被“计入”为对 myObj 的单击,而 evt.target 将是对 myObj 实例的引用。

  2. 而不是 evt.target 使用 evt.currentTarget。这是您将事件侦听器附加到的实例,而不是您单击的实例(这实际上是您在大多数情况下想要的)。

于 2013-08-24T19:19:44.400 回答