2011-02-08 5 views
0

私はマップ上に多くの異なるユニットを持っており、どのマップがマウスでクリックされたのかを知りたいと思います。私はこのようなことをしたい:foo:FooBar = e。MouseEventのターゲットですか?

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()を使う。しかし、これは、 "静的型オブジェクトを持つ値の、おそらく無関係な型ユニットへの暗黙の強制"

これを行うための非常に簡単な方法があると確信しています。どんな勧告?

答えて

0

値を正しいタイプにキャストするか、またはasキーワードを使用してください。それは右のタイプではない場合 キャストは実行時例外を発生させます、そしてasキーワードがnullを返します。

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

すばやく対応いただきありがとうございます。私は何を検索するか分からなかったが、これはまさに私が探していたものである。 – Andrew

+0

@Andrew You'rようこそ。 – Patrick

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) { 
     // ... 
    } 
} 

は何をしますか?タイプが一致していない場合はnullが返されるので、ifが必要です。asは返されます。

また

active_unit:Unit = Unit(e.target); 

を使用することができますが、型の不一致がある場合には、例外をスローすることができます。

IIRCの場合、キャストに関する質問と、asを使用するだけの質問があります。

関連する問題