我在地图上有许多不同的单位,我想发现鼠标点击了哪一个。我想做这样的事情:
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 :(得分: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);
但如果类型不匹配,则会抛出异常。
as
的问题。