log.ソフトウェア関連の技術系記事やウェブサービスに関する話題が中心。[Embed]で埋め込んだ動画(FLVなど)の再生と終了を検知する方法データ(ByteArray)からの動画再生Flash10からデータ(ByteArray)を直接実行する機能がNetStreamクラスに追加されている。NetStream.play()にnullを渡すことで、データ生成モードとなり、appendBytes()というメソッドを使ってデータ(ByteArray)から再生できる。Flash10からの機能なのでFlash9向けのAPIリファレンスを見ると載っていないので注意。動画の終了検知データ生成モードの場合、通常の再生と異なり色々とイベントが発生しないようである。通常はVideoクラスのEvent.COMPLETEイベントで終了を検知できるようだが、データ生成モードの場合はできない。動画の終了を検知するには、NetStreamクラスのNetStatusEvent.NET_STATUSイベントを使用する。入っていたらappendBytes()で追加したデータをすべて使い切ったということなので、終了を検知できる。Markupの明示的な改行()が効かなくなる。いつも直感的な動作をしてくれないAdobeのフレームワーク。ひとつやらかしてくれました。Markupの<br/>が効かないという事象が発生しました。BreakOppotunity.AUTOに戻すと効きます。BreakOppotunity.AUTOにしておかないとたとえ<br/>タグ(内部的には改行コード)であろうと改行してくれないようです。Flex4.6/Air3.1解決策TextConverter.importToFlow()は<br/>を見つけると<span>\u2028</span>という形式に変換するようです。直前までのspanを一度区切って、一個専用のspan要素を作ります。そこで、importToFlow()が返したTextFlowの子要素を再帰的に辿り、<br/>から変換されたspan要素のbreakOppotunityだけをBreakOppotunity.AUTOに書き換えることで問題を解決することができました。Air/Flex環境でゲームを作っていたところ、描画にCPUリソースを使いまくることに気づいた。埋め込みSWFなんかをそこそこの大きさで描画するとすぐに50%くらいCPUを消費してしまう。コンパイラオプションにuse-gpu=trueを設定しないと描画がすべてCPUで行われてしまうらしい。Air/FlexでStarlingも使わずにゲーム開発なんてなかなかしないだろうからか、そういった情報が全然なかったのでだいぶ悩んだ。Flexの設定ファイルに記述するrenderModeについては多く情報が存在する。renderModeにgpuを設定するだけでは無駄で、コンパイラオプションを設定しない限りGPUが使われることはない。GPUを使う場合は色々制約があり、下記に記載がある。http://help.adobe.com/ja_JP/air/build/WSfffb011ac560372f-5d0f4f25128cc9cd0cb-7ffd.htmlその他、あまり理解していないがuse-direct-blitというオプションもGPU描画に関連しているらしいのでtrueにしておくと高速化されるかもしれない。(Atom)プロフィール@santa128bitdotneet主にウェブ・モバイルアプリの開発をしているソフトウェアエンジニアです。