package内のクラスにマウスクリックのイベントを登録しても、マウスクリックでイベントが呼ばれなかった。
package { import flash.display.Sprite; import flash.events.MouseEvent; public class Test extends Sprite { public function Test() { graphics.beginFill(0x0); graphics.drawRect(0, 0, 100, 100); graphics.endFill(); // マウスイベントを登録 addEventListener(MouseEvent.CLICK, onMouseClick); } private function onMouseClick(e:MouseEvent):void { // クリックされたときの処理 } } }
このコードではマウスクリックしてもイベントが呼ばれない。
同じことで悩んでいる人がwonderflにいた。で、とりあえずの結論がFORKされていた。そのコードによるとgraphicsには反応しないがTextFrameには反応する。子オブジェクトを追加し、子オブジェクトをクリックすると反応するとあった。
wonderfl build flash online | 面白法人カヤック
ということで、自分も試してみた。
public function Test() { var child:Sprite = new Sprite(); child.graphics.beginFill(0x0); child.graphics.drawRect(0, 0, 100, 100); child.graphics.endFill(); addChild(child); // マウスイベントを登録 addEventListener(MouseEvent.CLICK, onMouseClick); }
先程のコードで四角を書いている部分を子オブジェクトとしてみた。その部分をクリックすると確かに親のマウスイベントが呼ばれた。これはwonderfl上でなく、FlexSDKでコンパイルし、Flash Playerで実行してみたが同じだった。
一番大元となるpackage内のスプライトだけでは反応しないというのが仕様なのかな。