2011-02-08 44 views
0

我在地图上有很多不同的单位,我想知道哪个单元被鼠标点击了。我想要这样做:foo:FooBar = MouseEvent的e.target?

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。任何建议?

回答

0

只需将值转换为正确的类型或使用as关键字。 演员将提高运行时异常,如果它是不正确的类型,as关键字将返回null:

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

非常感谢您的快速响应!我不确定要搜索什么,但这正是我所期待的。 – Andrew 2011-02-08 17:54:50

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相关的问题。