いまさら他人に聞けないFlashの基礎的な何かを勉強する会「ひよこの会」の東京支部「東京ひよこ」の第2回勉強会に参加してきました。
「ひよこの会」のガイドラインはこちら。
第1回勉強会に引き続いて幹事の、
@c_geru(Shigeru Ogawa)さんの開催宣言からスタート。
@c_geruさん、ありがとうございます!
続いて「ひよこの会」発起人のお一人でもあり、「ひよこの会」サポーターでもあらせられる”ちょんまげら”さんこと
@ProjectNya(ひろゆき)さんが大阪から参戦!ということでご紹介。
その後、全員が何かしらイベントにまつわることを発表しました。
以下、まとめレポートです。
なにぶん僕のActionScriptレベルでは理解の範疇を超えることもあるので、とりとめの無いメモになってる部分もあるかと思いますがご容赦ください。
「ComboBoxとKeyboardEvent.KEY_DOWNの関係について」
【メモ】
ComboBoxを使うと、それ以降stageのKeyboardEvent.KEY_DOWNのイベントが取れなくなる。
ComboBoxがフォーカスを取りっぱなしになっているらしい。
[対処法]
stageクリックで強制的にフォーカスを解放するようにする。
1回だけ実行しとけば、その後はOK。
その後removeEventしても大丈夫。
最初からフォーカスを解放しといても駄目?
→ComboBoxを使っちゃうと駄目ぽい。
FocusManagerが怪しい。
【その他意見交換】
イベントハンドラは空でもいいのか?
function hoge(e:event):void {
trace("hoge");
}
みたいなときに
hoge(null);
みたいな使い方はOK?
[参加者の意見]
ありじゃね?
stageイベントとかtimerイベントでもやるよ。
「loaderで意図した順番で画像を読み込む」
【メモ】
loaderで画像を一気に読み込む場合。読み込んだ画像を配列に入れると、画像のファイルサイズが小さいものから(読み込まれた順番で)入ってしまう。
これを意図した順番でやるには?
→loaderに名前を付ける。
プロファイラ設定でシミュレーションで確かめると分かり易い。
みんな外部画像はまとめて読む派?1個ずつ読む派?
@inoueakira(inoue akira)さんの発表
「stopPropagationメソッドについて」
【メモ】
イベントは伝搬する(バブリング)ので、ステージに配置したカエルをクリックしただけでも
「カエルがクリックされた」→「ステージがクリックされた」
と、イベントが伝搬する。
stopPropagationを使うと、その後にイベントが伝搬しない。
スマホやiPhone向けに、余分なイベントの伝搬を無くし処理を早くする。
バッテリーの消費とかにもつながる?
イベントの中にキャプチャによって処理を分けるのはあり?
→モバイル向けenterFrameではそれが推奨されている。
@kotaro_tan(ky)さんの発表
「Dispatchイベントの使い方について」
【メモ】
あるオブジェクトからDispatchイベントを飛ばして、別のオブジェクトから同期させる。
この使い方あり?
アニメーションの最後にDispatchイベントを書いて、次の処理に移動するとか。
[皆様の意見]
カスタムイベントを作るときに使う。
Android用にジェスチャーをとって反転したところでDispatchをとるとかありかもね。
内包してるイベントを外から使わせないように、中から外にDispatchで投げるとか。
@kenji_clown5(けんじ)さんことわたくしの発表
「HTMLLoaderとNativeDragEventを合わせて使うときの注意点」
AIRのHTMLLoaderでブラウザを作って、NativeDragEventでローカルファイルのドラッグ&ドロップをやろうとしたときにはまったことを紹介。
@ProjectNya(ひろゆき)さんの発表
「〜イベント祭り〜」
【メモ】
イベント処理について全般
大事なのは発行されたイベントを拾うもの
Dispatcherはイベントを発行するだけ。
イベントの伝わり方。
ひよこをクリックしたら、親オブジェクトまで反応する
調べていくのがキャプチャ、伝搬していくのがバブリング。
stopPropagationで任意のところでバブリングを停止する。
バブリングしないイベントもある。
カスタムイベントの作り方によって、親までバブリングするイベントを作れる。
[サンプル]
たくさんのドットそれぞれに対して自身が動くイベントを記述すると重い。
一つのイベントでそれぞれのドットに対して動く命令を記述すると速い。
数多いイベントを制御する場合に差が生じる。
「MovieClipとなかよくするためのEvent」
【メモ】
自分用イベントの送出(dispatch)
受け取るための監視(listen)
タイムラインに書いてもできる!
タイムラインにLabelをつけると、movieClip.currentLabelsという配列にFrameLabel型オブジェクトで入ってくる。
dispatchEvent(new Event(フレームの名前);
とできる。
addFrameScript、リファレンスにないけど使えるかも。
最後のフレームだけdispatchするとかは?
フレームに記述するしかない?
@tobishima(とんび)さんの発表
「TweenとTransitionについて」
【メモ】
イベントは手紙のようなもの。
命令を発行する側は、何が発行されるのかは知らない。
ハンドラがいるかいないかすら分かってなくても発行できる。
コンピュータの中にはかわいいメイドさんが働いていると思えば!
強い参照はメイドさんがイベントいつ起こるのかじっと見てる・・・
ガベレッジコレクターは先輩メイドさんがぽいぽい捨ててくれるイメージw
@katsuren(katsuren)さんの発表
「EventDispatch と Callback のテスト」
【メモ】
Eventのパフォーマンスについて
Event VS Callback
スマホでやるならパフォーマンス的にはCallbackのほうが良いと、Adobeの人が言ってた。
Callbackとは、関数を登録しておいて、イベントが発生したときにその関数を呼び出すというもの。
計測すると、Callbackのほうが速かった。
ただし、CallbackをEventのように汎用化すると、それほど差が無くなる。
@ug24k8(にっかぁうげ)さんの発表
「イベント関数の汎用化について」
【メモ】
イベントのリスナー関数に引数を渡すには?
引数を渡して「イベント関数を返す」関数を用意すればよい。
removeするときは、argument.caleeで。
消すために1回どこかに格納して、消すときに呼び出すとかもできる。
ローカル変数に格納するとか?
@usuaji(うすあじ)さんの発表
「ゲームを作ってみるよ」
【メモ】
ゲームは3つのブロックで構成してるけど、こんな感じでいいの?
[その他やり取り]
Class作って再利用してる?
→他のClassに依存しないClassを作っておく。
→独立したClassを作るかどうかかも。
ドキュメントクラスってどうなの?
→ドキュメントクラスにインターフェイスを付けていたときに、実態のクラスをimportしなくても使えたから便利。
startDragは遅いらしい。
mouseMoveよりEnterFrameのほうが速いらしい。
@HapHands(Takuya Hayashi)さんの発表
「初心者さん向けにつまづいたところをまとめてみた」
【メモ】
MCをドラッグ&ドロップする
コードスニペットはstageにしておくと、ステージ外に出たときの挙動制御が楽。
2つのMCに記述した場合、1つのMCをクリックしただけで、stageのマウスアップが両方発生する。
ダウンのリスナーのときに、stage.addEventListenerでマウスアップを記述し、
アップしたら、stageのリスナーを解除してやる。
イベントフローについて
ボタンインスタンスとMovieClipインスタンスをstageに配置
MCは入れ子になっている。
ボタンインスタンスは中までイベントが通らない。
MCの場合は中までいく。
テキストを内包したMCを配置。
テキストフィールドに対してtextInputイベントを直接書かなくても
mcやthisに対して書いても反応する。→バブリングする。
textInputイベント自体はオーバーライドの記述が無いが、
毎フレーム発生するイベントについて
EXIT_FRAME、ENTER_FRAME、FRAME_CONSTRUCTED、タイムラインのフレームアクション
イベントの関係性、順番など。
enterframe、frameconstructed、フレームアクション、exitframeの順番で実行される
enterframeはそのフレームに入ってもまだインスタンスにアクセスできない。
frameconstructedはフレームに入ってインスタンスにアクセスできるようになったら発生する。
exitFrameの前に凄い負荷のある処理があると違うかも?
「住所選択のようなもの」
【メモ】
市町村データをデータベースから取り込んできてFlashで表示する。
コンボボックスで市町村を選んだときにeventが発生する。
eventの連鎖。
大分類で何か選んで、中分類、小分類、と引き継ぐような処理。
@risay(Risa Yuguchi)さんの発表
「Object.watch的ななにかをAS3で」
【メモ】
Objectのプロパティをwatchして、何か変化があれば実行するという、AS2のときの処理。
MCのXとYに変化があったら・・とか。
setter、getterをオーバーライドして、見張る。
enterFrameだとOKだが、ドラッグだと駄目・・・
タイムラインでのアニメーションも駄目・・
setter、getterで取れないローレベルで座標を変化するようなものは駄目っぽい。
自分で作ってないClassのオブジェクトをwatchするのは難しい。
PHPからデータを受け取って表示するような場合、ライブラリに配置しただけで処理を分けられるとか便利。
@error1009(wing)さんの発表
「Dictionaryクラスについて」
【メモ】
Dictionaryクラスはインスタンスをキーにできる。
XMLを読み込んで、インスタンスと紐づける、と言った場合に活用。
複数のボタンに同様の処理をさせるようなときにいいかも。
Event.COMPLETEと、Dictionaryを組み合わせるといいかも。
1個のEnterFrameでfor eachでDictionaryを参照するとか、
ただし、順番は保証しない?
順番を管理するためのDictionaryを作るとか。
name以外のオブジェクトと紐づけて管理するのならDictionaryが便利。
XMLから読み込んだときに、一旦ベクターとかに入れておく。
以上、閉幕。
僕自身イベントについてよく分からないまま使ってた節があるので、キャプチャーからバブリング、dispatch、カスタムイベントなどなど・・基礎からいろいろ聞けて超勉強になりました。
CallbackやDictionaryなど、今まであまり使ってなかったものもあり、非常に密度の濃い勉強会でした。
というか、一番の収穫はいろんなFlasherの方と交流できたことですね。
@c_geruさん、幹事本当にお疲れさまでした!ありがとうございます。
第3回も出たいです。今度はしっかりスライド作って発表することを目標に・・・
そして勉強会の後は神保町に移動して、懇親会という名前の飲み会に。
ここでもFlashやらゲームやらアニメやら、その他諸々お話できてとても楽しかったです。
今回あまりお話できなかった方とも今後Twitterなどで交流を深めていけたらと思ってますので、皆様宜しくお願いします。
まずは自分自身、精進します!

大仕事、ごくろうさまです〜。勉強会中の写真は?w
残りの写真編集中ですので、しばしお待ちを〜w