Sprite とマウスイベント

Sprite クラスのごく簡単な紹介は以前にしましたが、今回はマウスイベントの使い方についての補足です。最初に関連するプロパティをまとめて挙げておきます。(最初の2つは親クラスからの継承です)

public mouseEnabled : Boolean    // マウスイベントを受け取るか
public mouseChildren : Boolean   // 子オブジェクトがマウスイベントを受け取るか
public buttonMode : Boolean      // ボタンとして振舞うか
public hitArea : Sprite          // マウスイベントの対象となる画面上の領域
public useHandCursor : Boolean   // カーソルの形状を手の形にするか

AS3 でボタンを作成する場合、まずは SimpleButton の使用が考えられますが、ちょっと凝ったものがほしい場合は代わりに Sprite を使うことができます。その場合、ボタンとして使用する Sprite の中に、さらに別の Sprite を子オブジェクトとして配置して演出を加えることも多いでしょう。

さて、このとき次のような問題が発生します。ボタンとして使用する Sprite の中にある演出用の Sprite もマウスイベントの対象となることが可能です。そのため、ボタン用の Sprite ではなく、その中の Sprite がイベントのターゲットになってしまうケースです。(AS3 では DisplayObject のサブクラスを追加すると、意図していなくてもイベントフローが変わってしまいます。)

ある Sprite がマウスイベントの対称でないことを明示的に示すには mouseEnabled プロパティを false に設定すれば可能です。Sprite 一つ一つについて設定を管理するのが面倒であれば、ボタン用 Sprite の mouseChildren プロパティを false にする方法もあります。これにより、ボタン用 Sprite の子オブジェクトは全てイベントの対象から外され、イベントの target は子オブジェクトの上でクリックされてもボタン用の Sprite になります。こっちの使用方法がたぶん使いやすいでしょう。

その他に、hitArea プロパティを使用して、マウスイベントのターゲットとなる Sprite を自身以外に指定することもできます。この場合は、hitArea で指定した Sprite の mouseEnabled を false にします。そうしないと、hitArea で指定された側の Sprite がイベントを受け取ってしまいます。

buttonMode プロパティを true に設定しておくと、マウスが Sprite の上に来たときマウスの形状を自動的に手の形に変えてくれます。(useHandCursor プロパティのほうが優先されます) MovieClip と違い Sprite にはタイムラインが無いため、マウスの動きにあわせて自動的に表示を変えることはできません。

コメントする

2014年1月

Sun Mon Tue Wed Thu Fri Sat
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
レンタルサーバー

月別 アーカイブ

Powered by Movable Type 4.261