今日は暖かいなぁ。単調なモデリング作業やってると眠くなってくる。
ちょっとFlashをいじる。
適当にサンプルを作っておきながら自分でもよく分からなかったので。メモと考察。
問題になっている内容はこんな感じ、だと思う。
Flashで画面遷移したい場合、通常Nextボタンなりを置くのが普通だが、なにも置きたくない、ただENTERキーで次のシーンへ移りたいんだ。
ってコトだろう、きっと。
普通はあるシーンのフレームへ
if(Key.isDown(Key.ENTER)) { gotoAndPlay(飛び先のシーンやフレーム); } stop();
って感じで書けばOKと思うよね。
でもコレだと、if()が実行されるのは1度っきり。
で、ここで覚えなきゃいけないのが「イベント」って言葉。一般的にPCではユーザによるキーボード操作、マウス操作はもちろん、CD-ROMをドライブへ挿入したとか、ダウンロードが終了したとかの事を総して「イベント」と呼び、プログラマは各イベントの処理をコーディングする事になる。
じゃFlash8に戻って。
Flashムービーの開始とともにイベントを常に監視しているプログラム(トップレベルクラス?)がいくつか存在する。キーボードイベントを監視してくれているのはKeyと言うクラスで、こいつからイベントを受け取って処理する事になる。
言葉で書いていくとややこしくなりそうなので、先ずはそのスクリプト。ムービーを止めたい任意のフレームへ書いてみよう。
//オブジェクトの作成とメソッドの定義 myKeyListener = new Object(); myKeyListener.onKeyDown = function(){ if(Key.isDown(Key.ENTER)){ gotoAndPlay(飛び先のシーンやフレーム); Key.removeListener(myKeyListener); } } //オブジェクト定義終了 Key.addListener(myKeyListener); stop();
始めにmyKeyListener(名前は何でもいい)と言うオブジェクトを一つつくり、onKeyDown()ってイベントを処理するメソッドを定義しておく。このオブジェクトはKeyクラスからイベントを受け取った後、ENTERキーかどうかを調べシーンを遷移させるのみの機能を持つ。
シーン遷移機能を持つオブジェクトをつくってもイベントを受け取れなきゃ意味がない。そこでKeyクラスのaddListener()と言うメソッドを使って登録する事になる。つまり、
「キーイベントが発生したらmyKeyListenerオブジェクトへ知らせなさい、後は彼が処理します。」
って言う事をKeyクラスに登録しておくのがKey.addListener()メソッドだ。
これでおしまい。
キーが押されると、Keyクラスは
「onKeyDownイベントが発生しましたよ〜。myKeyListenerさん、後よろしく!」
と伝え、受け取ったmyKeyListenerは処理を開始する。ちなみにremoveListener()はキーイベントの受取りから外すためのメソッド。
そんな感じ。
久しぶりにActionScript触った、ちゅーか勉強した。放ったらかしにしておくと忘れちゃいますなぁ。
でもCGデザイナさんがいきなり、オブジェクトだ、クラスだメソッドだ。って言われてもサッパリ分からんよね。
丸
2006-03-05 — 02:45
わ、すげー…
>ってコトだろう、きっと。
ってことです。はい。
本とかにもあんまり詳しく載ってなかったもので、
ネットで検索して出てきたのが
if(Key.isDown(Key.ENTER)) {
だったのです。
これに5日間ほど悩んで、わからずじまいで、
1fずつスクリプトおきました。
結構しんどい作業で…。
まあ、動作上に問題はなかったのでこれで終了。
でも、納得いかず。
ここを参考に、もっかいしてみます。
htaka
2006-03-06 — 00:07
>1fずつスクリプトおきました。
わ、すげー…
上のスクリプトはMX(AS1.0)でも動くと思います。
イベント処理が分からんかったら、
で最後2fをループさせて待機ってのもありかもね。
こうすれば1フレームに1度if()でキー状態のチェックをすることが出来るかな。試してないけど。
genji
2006-03-06 — 01:00
オブジェクトの作成って、変数を作るってこと?
htaka
2006-03-06 — 01:43
オブジェクトは変数じゃない、
関係で言うと変数は物を入れる箱、その物がオブジェクトってことになるかな。
混乱するかもしれんけど、数字の2とか、文字列”Hello”って変数じゃないよね。
なので、オブジェクトを作るってことはこの数字や文字を作るってことに近い。