ユーザーイベント(外部イベント) [Edit]

ユーザーイベントとは

マウス操作やキーボード入力など、ユーザーが引き起こすイベントをユーザーイベントといいます。
Version4 では、ボタンインスタンスでユーザーイベントを取得していましたが、Version5 からはムービークリップインスタンスでも取得できるようになりました。
どちらのインスタンスも、フレームアクションではなく、オブジェクトアクションにイベントハンドラを記述することにより、イベントを取得します。詳しくは、「イベントとイベントハンドラ」をご覧ください。

マウスイベント

ユーザーのマウス操作で発生するイベントをマウスイベントといいます。
Flashでは、on ( event ) ハンドラに記述可能なマウスイベントが7つ、onClipEvent ( event ) ハンドラに記述可能なマウスイベントが3つ定義されています。
まずは、on ( event ) ハンドラのマウスイベントから見ていきましょう。

on ( event ) ハンドラ (ボタンインスタンス)

  • rollOver --- マウスボタンが押されていない状態で、カーソルがボタンインスタンスの領域に入った。
  • rollOut --- マウスボタンが押されていない状態で、カーソルがボタンインスタンスの領域外に出た。
  • press --- ボタンインスタンスの領域内で、マウスボタンが押された。
  • dragOut --- press イベント発生後、マウスボタンが押されたまま、カーソルがマウスインスタンスの領域外に出た。
  • dragOver --- dragOut したカーソルが、マウスインスタンスの領域内に戻った。
  • release --- ボタンインスタンスの領域内で、押されていたマウスボタンが離された。
  • releaseOutside --- dragOut 後、ボタンインスタンスの領域外で、押されていたマウスボタンが離された。

ご覧のとおり、on ( event ) ハンドラのマウスイベントは、ハンドラが記述されたボタンインスタンスの領域とマウスカーソルの位置関係が重要となります。マウスカーソルの現在位置がボタンインスタンスの領域内か領域外か、その条件にマウスボタンが押された、離されたという行為を組み合わせてイベントが定義されています。
なお、マウスイベントは定義された条件がそろったときに一度だけ発生します。たとえば、press イベントはボタンが押された際に一度だけ発生します。ボタンが押されている間、連続して発生するわけではありません。

ここでいうボタンインスタンスの領域とは、ボタンシンボルの「ヒット」フレームに配置された図形の線、および塗りつぶされた面のことを指します。閉じた図形でも、内部が塗りつぶされていない場合は、線の部分のみが領域とされ、内部は領域外となりますので注意が必要です。ボタンインスタンスの領域は、ムービー再生時に、マウスカーソルが領域内に入ると指カーソルに変わるので、比較的容易に確認できます。

それでは、各イベントの発生を、解説ムービーで確認してみましょう。




なお、press イベント発生後、マウスボタンが押されている間は、カーソルがインスタンス領域外に出ても(dragOut)、ボタンインスタンスは「オーバー」フレームを表示します。この間は、他のボタンインスタンスのイベントは発生しません。
この点も含め、下のムービーで、各イベントの発生を確認してみましょう。




次に、onClipEvent ( event ) ハンドラのマウスイベントを見てみましょう。

onClipEvent ( event ) ハンドラ (ムービークリップインスタンス)

  • mouseMove --- ステージ上で、マウスカーソルが動いた。

  • mouseDown --- ステージ上で、マウスボタンが押された。

  • mouseUp --- ステージ上で、押されていたマウスボタンが離された。

ご覧のように、onClipEvent ( event ) ハンドラのマウスイベントは、on ( event ) ハンドラとは異なり、インスタンス領域とはまったく関係ありません。ステージ上のどこかで、マウスカーソルが動く、またはマウスボタンが押される、離されると、発生します。

したがって、複数のムービークリップインスタンスが配置されたムービーでは、ひとつのイベントの発生で、すべてのムービークリップインスタンスのイベントハンドラが実行されます。
on ( event ) ハンドラのように、どのインスタンス上でイベントが発生したのかを知るためには、MovieClip.hitTest メソッドでカーソル位置を確認する必要があります。

それでは、各イベントの発生を、下のムービーで確認してみましょう(右端はボタンインスタンスです)。







キーボードイベント

ユーザーのキーボード入力で発生するイベントをキーボードイベントといいます。
Flashのヘルプおよびマニュアルでは、マウスイベントとして記述されていますが、ここでは、別のイベントとして扱います。
Flashで、定義されたキーボードイベントは以下のとおりです。

on ( event ) ハンドラ (ボタンインスタンス)

  • keyPress "Key" --- "Key"で指定されたキーが押された。

onClipEvent ( event ) ハンドラ (ムービークリップインスタンス)
  • keyDown --- キーが押された。

  • keyUp --- 押されていたキーが離された。

on ( event ) ハンドラの keyPress イベントは、"Key"で指定された特定のキーが押されたときに発生します。これに対し、onClipEvent ( event ) ハンドラのキーボードイベントは、キーボード上のすべてのキーを対象とします(一部取得できないキーもあります)。
下のムービーで各キーボードイベントを確認してください。なお、右2つのボタンインスタンスにはスペースキーを、さらに右端のボタンインスタンスには「 a 」キーを指定してあります。




スペースキーを押したときに、2つのボタンのうち、左のインスタンスのみが、ハンドラを実行したことに気づきましたか?
ボタンインスタンスの場合は、1つのキーは、1つのインスタンスでのみイベントを取得することができます。複数のインスタンスで、同じキーのイベントを取得することはできません。このような指定がされた場合は、重なり順が一番下のインスタンスが、イベントを取得します。

実際に、キー入力を取得し、ムービーで活用するには、いろいろな注意点があります。これらについては、別のページでまとめる予定です。


・関連項目

イベントとイベントハンドラ
システムイベント(内部イベント)

コメント

この記事にコメントを書く

記事に対するテクニカルな質問はご遠慮ください(利用規約)。

その他の記事