萩萩日記

世界に5人くらい存在するかもしれない僕のファンとドッペルゲンガーに送る日記

Flashのお勉強、その後

ちょっと前からやってたFlashのお勉強なんだけど、今日ようやく1本簡単なゲームをだいたい作り終わった。だいたい、なのでまだ公開とかはしてないけど。

で、せっかくなんでいろいろ思ったことを。

まあ当然なのかもしれないけれど、WindowsでもLinuxでも動くのは、なかなか感動的。

久しぶりに長いことWindowsで仕事したんで疲れた。

WindowsなのでSubversionTortoiseSVNを使うことになるんだけど、なかなか使いやすかった。でもFlashのファイルってバイナリだから、差分とか取れなくてそこが不満。特にソースコードの差分管理ができないのがイヤだ。.asにして外に出すこともできるみたいだけど、それやるにはクラスにしなきゃいかんようで、外に出すためにクラス化するのもヘンかなと思ったのでやらなかった。

画像素材の作成と平行してプログラムを書いていたんだけど、ビットマップを入れ替えたりするのが簡単にできるんで、ダミーを使ってプログラムを進めても、それを本番の素材に差し替えるのがかなり楽だったので嬉しかった。素晴らしい。

まだ慣れてないせいもあるし、そういう本を読んでないせいもあるけど、Flashでものを作るときのイディオムというか、パターンを知らないので、いろいろなところで迷ってしまう。特にソースコードが散逸してしまう印象があって(どのフレームに書くか、どのオブジェクトに書くか、とか)、どうも気に食わない。スクリプト用のレイヤーを用意してロックしておくとか、そのくらいは、やってるけれども。前に読みかけて止めたFLASH OOP (Advanced Web design books)を読もうかな。

で、前になんで読みかけて止めたかというと、いまさらAction Script 2.0もないかなと思ったからだったんだけど、結局その後、Action Script 3.0を使うと、結構新しいFlashプレーヤーを要求されることがわかったのと、あと、一緒に仕事する人(今回のゲームでは一緒にやってないけど)が、Flash MX 2004を使っていて、かつアップグレードする気がないとのことで、こちらだけCS3を使うわけにいかんということで、結局、えーと、なんか主語が何かわかんなくなったね、この文章。

そういうわけでFlash MX 2004を使うことになり、結局Action Script 2.0で書いているので、あの本も読んで意味あるかなと思った次第。

Acrion Scriptが書きにくい。言語仕様がどうのこうのというのではなくて(あ、でもPerlでいうところのuse strictというか、VBでいうところのOption Explicitというか、宣言してないものを使おうとするとエラーになる機能は欲しいよ)、スクリプトエディタが使いにくすぎる。つーかvimで入力させろって話。なんで外部エディタ使えないんだろう。.asにすると云々の話は上でも書いたから繰り返さない。だいたい、僕が使ってるのはHappy Hacking Keyboard Pro 2の無刻印版というなんだかオタクな感じのやつで、カーソルキーとかってFnと一緒にキー押さないと入力できないからえらい面倒だし、よく間違えてPageDownとか入力しちゃってソースのどこ読んでるかわかんなくなるし、無刻印だから数字の位置があやふやで困るし(テンキーとかないしね)、んもう的な。

あと、スクリプトエディタの検索機能が貧弱なのも参る。まいっちんぐ並に参る。スクリプトエディタで検索すると、そのソースの中だけでしか検索できないし、スクリプトエディタの外で検索するとflaファイル全体で検索できるけど、「すべてを検索」みたいなことをしても、シーン1のscriptってフレームで見つかりました的な、そんなこと知ってるよその先を教えろこのバカ機械、みたいな気分になる。

その近辺のことでいうと、Undoの機能も、ちょっと謎だった。スクリプトエディタでのUndoと、Flash全体というかステージとかタイムラインとかの処理のUndoが別になっていて、つまり、スクリプトエディタでUndoすると、スクリプトに対するUndoしかできなくて、こっちはいろいろ組み合わせて作業してるわけで、別系統にされると困るのよねって話。リンダ並に困る(書いたらアレだよなと思ったけどやっぱり書いちゃった。あーあ)。

Windowsでの作業なわけだけど、いつもはLinuxを使ってるので、いわゆるCPU切り替え機ってんですか、KVMって言うんですか、もっと普通にパソコン切り替え機っていうんですか、まあそういうのを使ってるんだけど、なんか特にWindowsを使ってるときに、前触れもなく勝手にLinuxに切り替わることがたびたびあって、キレそうになる。あと、目が痛い。

やはり慣れていないせいか、まだまだ謎が多く、結構何個も、よくわからないので逃げるみたいなプログラムを書いてしまった。たとえば、とあるオブジェクトがステージ上にあるんだけど、このオブジェクトが、特定のタイムラインからやってくると、undefinedになってしまって、操作ができなくなってしまう。いろいろ試したけどよくわからず。で、それはゲームオーバーのときに、リプレイするというやつだったんだけど、ゲームに直接戻るんじゃなくて、オープニングの画面まで戻ってからやると大丈夫なことがわかったので、フラグを用意して、リプレイのときにオープニング画面まできたらオープニング画面を飛ばしてゲーム画面に行くみたいな、そんななんていうか、工夫感満載のコード書いてイラっと来た。つーか、いまここで「来た」って書こうとしたら最初に「北」って表示されたときに確定してしまって、ちっとか思いながら今度は「着た」ってところで確定してしまい、もうイラっと来たと書きながらまたイラついてどうするんだろうって話。メタかよ、と。

WindowsでもSKKな僕は、SKKIMEを使ってるわけですが、最近Linuxではuim+SKKにしたもんで、微妙に挙動が違くて困る。そしてもういまどきなんだから「違くて」ぐらい辞書登録しろよIMEとか思う(いま自宅で妻のWindowsで日記書いてるのです)。

デバッグ用にエラーを捕捉しようとして、

throw new Error('ばーか!');

みたいなこと書いたら、出力はされるけどFlashの実行は止まらん。なんでだこのやろう。それだったらtraceするのと変わらんやん。dieとか試したけどダメだったしな(あたりまえ)。あ、exitとかできる?よくわかんない。

よくわかんないといえば、ちゃんとマニュアルとか調べてないけど、リフレクション機能とかないのかなあ。さっきも書いた、ステージにあるはずのオブジェクトが行方不明になったりするんで、リフレクション機能で、あるオブジェクトに所属してるオブジェクトとかが動的に探せたら楽なんだけどな。

うんと、そんな感じ。

けっこうあるなあ。