まめ畑

ゆるゆると書いていきます

chumby用のWidget作りではまった


かなり前に買って色々遊んでいるchumbyですが、時間があったので凄く久しぶりにWidget作ってみました。
2回目のASプログラミングという事と、PCとchumbyで動作の差異があって苦労しました。
FlashDevelop3.0.0RC2を使ってます。FlashCS4欲しいです。


作ってみたものは、これ


キャプチャ


ユーザ生放送のRSSを表示するもの。
5分毎に更新してます。
表示するだけなので、今どんな放送がされてるか確認するだけです。
数百件を処理しようとすると重くてどうしようもないので、最新20件にしてます。


これを作るのにいくつか困った事が。
1つ目は、setInterval関数が動かないという事。
5分毎にRSSを読み込ませるために、setIntervalで定期実行をしようとしたら、PC上では上手く動くのにchumbyで実行すると動かない。
橋本商会 » chumbyで日本語Twitterを読めるwidgetを作ったでもsetIntervalについて書かれていますが、1秒毎に実行させようとしてもなぜか動いてくれない。
色々試したけれど、どうにもならなかったので

var sec:Number = 0;
mc.onEnterFrame = function() {
   sec++;
   if (sec >= _interval) {
      sec = 0;
      //定期実行の処理などなど
   }
}

な感じで、EnterFrameイベント毎にカウントを実行する事にした。
30fpsにしたので 5*60*30=900という事でインターバルを設定した。
これはすっきりしない。


2つ目が、trace関数の出力が出ない。
traceで出力したものは、chumbySSHでログインしてSWFを実行すると表示されるはずなのに表示されない。
コメントで教えていただきました。
FlashDevelopのコンパイルオプションを以下の様に設定する事で出力出来ます。

FlashDevelopのProject->Properties->Compiler Options->TraceModeを"FlashMX"

chumby:~# chumbyflashplayer.x -l 32 -i /mnt/usb/hoge.swf

という形で実行時のログレベルでtraceだけ指定しても出てこない・・・。
表示されるはずなんだけどなぁ。


3つ目は自分の不手際。
RSSを読み込む時に

var xml:XML = new XML();
xml.onLoad = function(success:Boolean){ //色々な処理 }
xml.load("アドレス");

という感じでやっているのですが、読み込んだXMLファイルをキャッシュしていて内容が更新されないで少し悩みました・・・。
アドレスの後に前回のリクエストと違う数字列をくっつけるようにして解決

http://hoge.com/fuga.xml?数字

といった感じ。


今回は背景の画像を埋め込むのにswfmillを使用しました。
FlashDevelopには標準でToolsフォルダ内にあるので、便利です。
プロジェクトの「Pre-Build CommandLine」に指定すると自動で実行されます。
後は、Code Injectionの設定をして埋め込めばOKです。


既にchumbyの日本語対応が始まっていて、日本語化キットを導入していれば、フォントの埋め込みをしなくても日本語が表示出来ます。
その際に、

var format:TextFormat = new TextFormat();
format.font = "_typewriter";   //_typewriterを指定する

といった感じで「_typewriter」を指定してTextFieldなどの「setTextFormat」関数に渡してやるだけです。


慣れないASとchumbyとPCの差異で悩まされましたが結構楽しいですね。
もっと色々創りたくなりました。
chumbyニコニコ動画見れるようにならないかなぁ。