2011-02-08 45 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相關的問題。