foo:FooBar = MouseEvent的e.target?

时间:2011-02-08 17:38:37

标签: actionscript-3

我在地图上有许多不同的单位,我想发现鼠标点击了哪一个。我想做这样的事情:

private function setupUnit(gridx:uint, gridy:uint):void {
    unit = new Unit(gridx, gridy);
    unit.addEventListener(MouseEvent.CLICK, onUnitClick);
}

private function onUnitClick(e:MouseEvent):void {
    active_unit:Unit = e.target;
}

稍后使用active_unit.method()。但是这会引发错误“将静态类型Object的值隐式强制转换为可能不相关的类型单元”

我确信有一种超级简单的方法可以做到这一点= P.有什么建议吗?

2 个答案:

答案 0 :(得分:0)

只需将值转换为正确的类型或使用as关键字。 如果它不是正确的类型,则转换将引发运行时异常,并且as关键字将返回null:

var active_unit:Unit=Unit(e.target);
// or
var active_unit:Unit=e.target as Unit;

答案 1 :(得分:0)

什么是

private function setupUnit(gridx:uint, gridy:uint):void {
    unit = new Unit(gridx, gridy);
    unit.addEventListener(MouseEvent.CLICK, onUnitClick);
}

private function onUnitClick(e:MouseEvent):void {
    active_unit:Unit = e.target as Unit;

    if (active_unit:Unit) {
       // ...
    }
}

做什么?您需要if,因为如果类型不匹配,as将返回null

您也可以使用

active_unit:Unit = Unit(e.target);

但如果类型不匹配,则会抛出异常。

IIRC,这里有很多关于投射与仅使用as的问题。