FLASHのDateクラス

トラックバック(0) コメント(0)
SHARP系端末(931SH、932SHなど)でFLASH上でDateクラスを利用すると使い方によっては値がおかしくなってしまうみたいです。
現在時刻を

var d:Date = new Date();

のように取得する分には問題ないのですが、日付指定で例えば

var d:Date = new Date(2008, 1, 10);

と入力すると、実際の値は一ヶ月ほど未来に進んでしまっているようです。(どの日付指定がおかしくなるのかは特定できませんが...)
これはDataクラスのsetYearなどのメソッドを使っても同じ現象が起こります。
ただし、setTimeは例外のようで、ここで通常の使用どおり引数にミリ秒を指定すると正しいDateインスタンスが生成されます。ミリ秒は1970年1月1日からの経過ミリ秒ですが、もちろんこのミリ秒を求めるために

var d1:Date = new Date(2008, 1, 10);
var d2:Date = new Date();
d2.setTime(d1.getTime());

とやってしまっては意味がないので経過ミリ秒を自力で計算する必要があります。
計算はちょっとめんどくさそうですが、閏年に気をつければそれほど難しくはないでしょう。
ちなみに閏年の判定は以下の通り

function isUruudoshi(year:Number):Boolean
{
    return year % 4 == 0 && (year % 100 != 0 || year % 400 == 0);
}

事象としてありえない現象(バグ関連)が起こった時

大概は自分の凡ミスである。

そう教えてくれたのはとある技術者とウィジェットでした・・・

 

とはいえ凡ミスでないときは根が深いので油断は禁物ですね。

 

FLASH上でアニメーションをさせるときは

「アニメーション対象のMCはなるべく小さく」

がいいです。
特に931SHのような高解像度の端末ではアニメーションのパフォーマンスが極端に違ってきます。

「画面全体をスライドさせる」とかやらないほうが吉ですね。

swgtファイルも拡張子をzipにして一般的な解凍ソフトで中身を取り出すことが出来ますが、
その中身のconfig.xmlは署名した際に微妙に書き換えられているので注意が必要です。

具体的には<secureid>というタグが追加されてます。

これに気付かずに中身をwgtにまとめて再び署名したりするとsecureidが被って多分おかしくなります。

swgtをインストールするときに「コンテンツに問題があり・・」と表示された場合は確認してみてください。
JavaScriptで実装中、エラーが起こってもエミュレータは何も通知してくれないので
どこで不具合が起きているかを自分で突き止めなくてはいけません。

そんなときにお手軽なデバッグ方法としてwidget.openURL()を使う方法があります。
こいつは本来はブラウザを立ち上げる際のURLを指定するものなのですが、
エミュレータ上で実行するとポップアップが出てきてその飛び先URLを
表示してくれるのでそいつを利用してしまいます。

使い方は単純に引数にデバッグ用の文字列を入れるだけです。

JavaScriptのalert()的な感覚で使うことが出来ます。

エミュレータのプロジェクト設定(プロジェクトタブ)でTrusted: Third PartyをONにします。

GPSに限らず署名が必要な機能はこれで働きます。

これをやらずにwidget.location.update()とかやっても反応はないです。
そのわりにTrusted: Third Party ONの設定は保存できるわけではないので
たまに原因がわからず混乱します・・・

バージョンアップの際、同一のWidgetコンテンツは上書きされます。
この「同一のWidgetコンテンツかどうか」についてですが、
以下が全て一致する場合に同一であると判断されます。

■id 属性値
■author要素
■署名情報

なので、author要素を書き換えたりすると、id属性値が一致していても
バージョンアップの際に上書きされないので注意。

ウィジェットを開発する上で、「携帯が圏外になったときの動作」を確認したいことがあると思います。

端末には「電波OFFモード」もあるのですが、やはり実際に圏外だったときの動作はチェックしておきたいところです。

とはいえ圏外の場所というのはそうそう開発現場の身近にあるとは限りません。

いろいろと手段を模索しましたが、
とりあえずお手軽・経済的な方法で実現できたので、その方法を紹介したいと思います。

キーワードは「アルミホイル」です。

作り方
 端末が少しゆったり格納できる程度のちょうどいい「箱」を見つける
 
 その箱の上部を空けておき、アルミホイルで外側を何重かでグルグル巻きにする。
 
 アルミホイルの巻き方を工夫して上部から端末を投入できるようにしておく

■使い方
 ・圏外になるか確認
   箱に入れて上部を閉じた状態でその端末に電話をかけてみる

 ・通信開始直後に圏外になる状況を作り出す
   ウィジェットを操作して通信処理開始する
   ↑の操作の直後に箱に入れてアルミホイル上部を閉じる

■作成例
090108_185229.jpg
090108_191235.jpg
  上部の開閉部が破れやすいし、圏外のままでいろんな動作を確認することはできないけれど、
  とりあえずお手軽に実現する方法としてどうでしょうか。
  
  中の箱は四角ではなく丸みを帯びていたほうが痛みづらいかも。

Widgetを実機やエミュレータに読み込むと時に画面が真っ白という状態になったことはないでしょうか?

メモリ的な負荷よりも処理可能なレベルを超えていると発生することが多いようです。

パスを走査線のように無数に並べるなどすると処理限界に達するのかホワイトアウトしてしまいます。

また、Widgetで表現不可能?な処理を行っても発生するようです。

半透明のシェイプをシェイプトゥイーンするなどしても使用量に関わらず発生してしまいます。

 

まだまだ、使える表現使えない表現の検証が必要な段階ということでしょうか。

 

特殊文字について

トラックバック(0) コメント(0)

外部XMLからFlashにテキストを読み込んで表示させるとき、

「&」や「'」等の特殊文字が上手く表示されずに悩みました。

特殊文字の場合、例えば「&amp;」と表記することで画面では「&」と表示されるはずが、

「&amp;」のまま表示されてしまうのです。

これ、Flash内でのXML読み込み方法に問題があったようです。

 

【特殊文字NG】 ~.firstChild;

「A&amp;B」と表記⇒「A&amp;B」と表示

 

【特殊文字OK】 ~.firstChild.nodeValue;

「A&amp;B」と表記⇒「A&B」と表示

 

「nodeValue」はノードの値という意味です(そのまんまですが)。

これを付けるだけで特殊文字が上手く表示されるようになりました。

アイテム

  • 090108_191235.jpg
  • 090108_185229.jpg