Flash プログラミング

状態の管理をしっかり考えよう~とFlash コンテンツ作ってるときに思いました。

やっていたのは、MovieClipシンボルが1つあって、そのMCは4つの状態(サムネイルのメニューボタン、拡大画像表示、進むボタン、戻るボタン)を持っていて、その状態が変わるのを滑らかにつなぐもの。もうソースぐちゃぐちゃ。

風呂に入ってたら state パターンを思い出したから、それ使って書き直そう。状態遷移図を思い出さなくちゃ・・・。

で、ソースぐちゃぐちゃになっちゃう原因は作りながらアニメーションを考えているからだと思うんだよね~。かといって、頭ん中で思い描いている動きがそのままかっこいいかというと、そうでもないし、やっぱり一度実際に動かしてみないことにはわからん。それが気持ちのいい動きかや、全体の雰囲気にあってるかは、ある程度の塊までできないと、なかなか判断できません。

あと、組みながら「ここからこういう動きになったらいいかも?」っていうのが出てきたときに、勢いでやってみて、うまくいっちゃったりすると、すごく気持ちよくってやめられん。というのがあるかも。そういう時って、どっちかというと、偽グラフィック野郎の頭になってるので、冷めないうちに実現したいっていう欲求がでてきて、綺麗なコードを書くと時間かかっちゃう場合は、まず動きを作ってみたくなっちゃうんです。すごい人はこの時点でそういうことに対応できるコードになっているんだろうけど、僕はまだその域まで遠~いとこにいるので、だんだんぐちゃぐちゃになってくるんだわね~。コピペ連発とか。

綺麗なソースでさっと動きを組めるといいよなぁとは毎度毎度考えているので、デザインとプログラムの両方から攻めていかないとダメですな。経験か。

UML忘れた

デモで超急ぎで作ったやつを本番用に設計しなおそうとしてて、せっかくだから UML でやろう~とEnterprise Architect の評価版入れて遊んでるんですが、UMLもデザインパターンも忘れてしまったorz

しばらくやってようやく思い出しかけてきてはいるのだけど、作業はなかなか進みません。ふが~。コードは頭ん中に浮かぶんだけど、どう図にしたらいいのか悩んでる感じです。知らないあいだに構造が複雑になってきているようだから、もっと細かく分解して単純なところからきっちり攻めていってみようかと。

EA は AS2 も AS3 も吐き出せるから、ちゃんと設計ができればコード書くときにかなり楽になりますねぇ。もうちょいと試したら買おう。

しっかし、しょうがないといえばしょうがないのだけど、あっちだこっちだふらふらしてるから、リハビリに時間かかりすぎるんだよなぁ。いかにして忘れないようにするか・・・ちゃんと毎回使うしかないか。

flashメモ ムービー内のスクリプトが原因で実行速度が遅くなっています

for も while も使ってないのになんで?・・・っと思ってちょっと見てみた。(Macromedia – Flash TechNote : fl0251 – 「ムービー内のスクリプトが原因で実行速度が遅くなっています。」というエラーメッセージが表示される理由)

ルートのタイムラインで、stop();でとめているところを、this.gotoAndPlay(this._currentframe – 1); をいれたら、でなくなった。

コトの発端は、MovieClipLoader で複数のファイルをロードしてその状況を自前のプログレスバーに表示するテストをしていたら例のダイアログが出たんです。で、ダウンロードのシミュレートの回線速度上げたらでなくなったんだけど、それじゃ解決にならんと。

最初は、同時に1ファイルしかダウンロードさせないようにスクリプト書こうと思ったんですけど、コネクションの制限はブラウザにまかせたほうがいいよなぁと思ってやめ。

メッセージを送るタイミングの制御をしようかとも思ったけど、MovieClipLoader 本体をいじらんといけないような気がして、気がのらないので、保留。

結局上に書いたstop();をやめる方法を見つけてなんとかなったようです(たぶん)。これからは、あんまし stop(); 使わんほうがいいのかなぁ・・・。 なんか Director みたいだ。 go to the frame -1 。。。ってか、もう go to the frame を忘れてるし!(検索した) Director 使わなくなってからけっこうたったからなぁ・・・

flash 小メモ

flash でプログラム書いてていくつかハマッたのでメモメモ。

クラス内で setTimeoutを使うときには頭に_global
_globalをつけない場合はコンパイルエラーになる。
FN0512001 – setTimeout()関数 – Flash : テクニカルノート
MovieClipLoader で swf のロード完了をチェックするとき、onLoadComplete ではなく onLoadInit イベントを使うとMCの値をすぐに操作できる
サウンドの入ったMCを onLoadComplete のところで attachSound しようとして失敗。 onLoadInit でやってみると成功。マニュアル読めと。

ムービー載せてみた

2004年に作ったやつを flv にして載せてみよう~と、なんとなく思ったのでやってみた。(当時もちょっとだけ載せたんだけど、家サーバーがダメになっちゃって・・・。)。


(FLVファイル)

表向きは映像の練習~ってことで作ってみたやつなんだよね~。この先作るであろうインタラクティブコンテンツへの外堀埋め。音作って、実験でいくつか作った1分くらいの映像素材を作って、DFXで合わせて色補正して~って感じ。かっこいい/かっこわるいは作ってみないとわからんし、練習~。(今までで映像って3つしか作ったことないけど)

で、ここまで載せるのに無駄に苦戦した。

まず、wordpress のエントリに JavaScript がうまく書けなくて、結局外部jsファイルを<script src=”hogehoge.js”>で読み込ませるようにした。投稿内容のところにjavascript 打って改行すると、br要素が入って嫌な感じなんで。AC_RunActiveContent.jsもフォルダに入れといてパス指定をきっちり。

swf は、FLVPlaybackコンポーネントをそのまま使った。パラメータのcontentPathとskinは、めんどくさいので絶対パス指定にしちゃいました。

あと、はまったのは、AC_FL_RunContent関数の引数で、srcとmovieの値を片方しか変更しなくて、「読み込めない~」と。両方変えないとだめなんだ。

flash 8 から 7形式で書き出すときの曲線

「このプレーヤーでは、線の拡張機能はサポートされていません」ってやつが出て、なんか嫌・・・で、調べてみたところ、なぜなにGAC->Flash->線の機能拡張を発見。試してみたけど、ダメだた・・・。

で、もうちょいといじってみたところ、そういや、Flash 8 で線の終端いじれたのを思い出し、線のプロパティの「終端」と「結合」を「丸型」に変更してみた。うまくいった。

追記:

.fla を mx2004形式で別名で保存すれば、8用のプロパティが消えるから一発なんだね。8の機能使ってるときはダメだけど。

IE で Stage.width Stage.height

IE で、swf を置いた場所が、ブラウザで表示される部分の外だと 0 になるっぽい。で、表示されると、onResize で正しい値が帰ってくるぽい。Firefox だとならないんだけど。これで、えらいことはまった。

MovieClip を beginFill(); lineto(); endFill();で作るときに、 width と height を 、Stage.width と Stage.height にしてたので、IE だと両方 0 だから、何も描かれないんだわね。これでも、またエライことはまった。マスクとして使ってたから、見えないもんで、威力倍増でした。

まぁ、気付いてよかったわ。うんうん。

スクリプト書いてます。JavaScript & ActionScript

半分仕事(予定)、半分勉強で、ajax と flash を組み合わせたものを作ろうとしています。DB屋というか、サーバーサイドの人がいないので、クライアント側で何とかしようと画策しているところです。力技。

フル Flash も良いんですが、Ctrl+Fで検索したいし、ブックマしたいし、重要な情報は html で出しておきたいよなぁ~と思って、ちときばってます。まだまだ、まとめきれてないんですけど。そんなわけで、久々にキーボードを数時間ダカダカやってます。

はまったことその1。Flash と JavaScript の間をやりとりするのに、 ExternalInterface を使っていたんですが、ローカルだとテストできないぽい。サーバーたてて、localhost で表示したら動きました。おそらくFlash Player 8 のローカルファイルセキュリティ絡みなんだと思うんだけど、ちゃんと読んでないので・・・。

はまったことその2。prototype.js で、$(“hogehoge”)とやると、getElementsById()になるわけですが、途中で、なにを思ったか$(hogehoge)と引用符をなくして記述しちゃってたので、動かな~いとジタバタしてました。アホミス。

はまったことその3。変数のスペルミス。orz。 JavaScript のコードアシストのついたエディタを使ったほうがよさげだ。何というか、この原因を発見したときのさみしさは、何ともいえんでございます(涙

久々にスクリプト書いてて、動かない~うぎゃ~、とか何十回も思うけど、ちーーっくしょ~~~って何とか直そうとする気力が出てきてるからいいかも。最近こういう感覚なかったからねぇ。日々コツコツレベル上げです・・・あ、FF開けてない(汗汗