SSブログ

WiiFlashAPI の速度を上げる [ActionScript2.0]

おはようございます。JC です。

一昨日とかに公開した Wii Flash API だが、難点は Flash と JavaScript の通信する速度が遅いこと。
それをどうにか解決できないかともがいてみました。

まずは実験。
「JavaScript 側から Flash へは、どれくらいの間隔で アクションの呼び出しができるのか。」

setInterval を使って定期的に関数を呼び出しているのだが、
ちゃんと取れる間隔は100ms だった。(10ms 刻みで測定)
それ以下になると、たまに呼び出しができない時が発生。
50ms くらいにすると、一切呼ばれない事態が発生する。

次は原因を追及する。
Flash / JavaScript Integration Kit (Beta) (以降FJIK)を使っているのでそのソースを見てみた。

FlashProxy の call が呼ばれると、関数 + 引数 を それぞれ FJIK の規定の形にシリアライズする。
target の DOM オブジェクトの innerHTML に Flash のタグを入れてやる。
その際、 シリアライズした 関数 + 引数 を flashvars を使って Flash に読み込ませる。
読み込まれるフラッシュは JavaScriptFlashGateway.swf だ。
その JavaScriptFlashGateway.swf が、LocalConnection を使い、ユーザーが作った SWF ファイルと通信を行う。
その時に恐らく、 SWF ファイル同士が通信を行う前に 次の call が呼ばれ、
通信することなく JavaScriptFlashGateway.swf の再読込が行われるのだろう。

さて、どうするか。
通信する前に消されなければOKって事だろう。って事でちょっと拡張してみる。

内容としては、 FlashProxy を複数作り、それぞれがそれぞれの SWF ファイルを使って順序よく call されれば問題ないのでは?
って事でやった結果のサンプルがこちら
3つの FlashProxy を使って順番に call させた。
40ms くらいでも大丈夫になったが、問題はもう一つでてきた。
Flash が LocalConnection を使って通信するのに結構マシンのパワーを使うのか、
呼ばれる回数が増えたので重くなっているのか分からないが、 Flash 側の FPS がガクンと落ちた。
コレは改良の余地有りか・・・。

ちなみに、コレがその時の Wii.js です。AS ファイルの方の変更は無し。
主な変更点は以下



// FlashTag の省力化
FlashTag.prototype.toString = function()

//// FlashProxy の拡張
// callJS の退避
var FlashProxyCallJS = FlashProxy.callJS;

// コンストラクターの拡張
FlashProxy = function(uid, proxySwfName)

// 初期化メソッド追加
FlashProxy.prototype.init = function(num)

// call 時の省力化
FlashProxy.prototype.call = function()

// 退避させた callJS を復活
FlashProxy.callJS = FlashProxyCallJS;


function の中身はソースをみてください。
初期化してできる事を先にやってみたのと、無駄な分岐を省いてみた。
元のソースファイルの後に読み込まないと意味がありません。
main 、 HTML の記述も少々変更したが、省略。

とりあえずこれから仕事なのでもう行きます。


nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。