ゲームが作れるようになるまでがんばる日記

ゲーム制作のことを中心にゲームに関することを書いています

マウスイベントが来ない?

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内のスプライトだけでは反応しないというのが仕様なのかな。