FlashLite2.0:SharedObjectでデータが保存できない
こんにちは今日は先日書いた
FlashLite2.0でゲームを作っている時に発生した問題について書いてみます。
FlashLite2.0でゲームを作っている時に発生した問題について書いてみます。
問題は PC用に開発した100マス計算を
FlashLite2.0で携帯に移植しようとした時に発生しました。
PC用のFlashでも携帯用のFlashlite2.0でも 両方ともActionScript2.0を使っていたので スクリプト部分はそのままコピペするという方法をとりました。
しかし、SharedObjectが動作しない!!
いや、正確には最初は動作していたのですがいじっている内に いつの間にか動かなくなっていました。 そのせいで動作しない原因がSharedObjectに関するスクリプト部分でないと勘違い。。。
(おかげで原因究明に時間がかかりました。
どうやらPC用のFlashと携帯用FlashLitedのSharedObjectは別物だったようです。
自分用のメモもかねてFlashLite2.0でSharedObjectを使うときの注意を。
最も注意したいのは、PC用のFlashでSharedObjectのデータは即時に書き込まれますが、 FlashLiteでのSharedObjectのデータ書き込みは非同期である点です。
そこで、SharedObjectにリスナー登録を行いデバイスの書き込みが可能になるのをリスナーで通知させる必要があります。
GoogleでFlashLite SharedObjectと検索すると下記のページが見つかると思います
http://livedocs.adobe.com/flashlite/2_jp/main/wwhelp/
wwhimpl/common/html/wwhelp.htm?
context=LiveDocs_Parts_wEcute&file=00000749.html
が、ソースが間違ったままみたいなので注意してください。
(俺の方が勘違いしてたらこっそり指摘してください)
正しくは以下のように
このコードを実行すると二回目以降に以下のデータの内容が保存されているのが分かると思います。
出力結果。
mySO.data.name = "Sigismund";
mySO.data.email = "siggy@macromedia.com";
他の部分はPC用と同じく
mySO.dataがObject型なのでその中に自由に変数なりクラスなりを定義して使えばいいわけです。
例えば
mySO.data.age = 10;
mySO.data.TEL= 1234567890;
みたいな感じで。
もう一つ注意したい点として上記のページにも書いてありますが,Flash元のバージョンが異なるとデータが共有されないということです。
PC用のFlashでは同じURLのSWFファイルならバージョンが違っていても読み込むことが出来ます。
しかし、FlashLiteではデータを保存していたSWFファイルの内容が変更されていた場合(スクリプトの書き換えとかで)には保存していたデータが読み込めなくなってしまいます。
あと、携帯などのモバイル環境だとデータを保存できる容量が少ないという点も注意が必要です。
(実際どれぐらいなのかは分かりません、スイマセン;;)
以上。
FlashLite2.0で携帯に移植しようとした時に発生しました。
PC用のFlashでも携帯用のFlashlite2.0でも 両方ともActionScript2.0を使っていたので スクリプト部分はそのままコピペするという方法をとりました。
しかし、SharedObjectが動作しない!!
いや、正確には最初は動作していたのですがいじっている内に いつの間にか動かなくなっていました。 そのせいで動作しない原因がSharedObjectに関するスクリプト部分でないと勘違い。。。
(おかげで原因究明に時間がかかりました。
どうやらPC用のFlashと携帯用FlashLitedのSharedObjectは別物だったようです。
自分用のメモもかねてFlashLite2.0でSharedObjectを使うときの注意を。
最も注意したいのは、PC用のFlashでSharedObjectのデータは即時に書き込まれますが、 FlashLiteでのSharedObjectのデータ書き込みは非同期である点です。
そこで、SharedObjectにリスナー登録を行いデバイスの書き込みが可能になるのをリスナーで通知させる必要があります。
GoogleでFlashLite SharedObjectと検索すると下記のページが見つかると思います
http://livedocs.adobe.com/flashlite/2_jp/main/wwhelp/
wwhimpl/common/html/wwhelp.htm?
context=LiveDocs_Parts_wEcute&file=00000749.html
が、ソースが間違ったままみたいなので注意してください。
(俺の方が勘違いしてたらこっそり指摘してください)
正しくは以下のように
function loadCompletePrefs (mySO:SharedObject) {
if (0 == mySO.getSize() )
{
// サイズが 0 の場合、データを初期化
mySO.data.name = "Sigismund";
mySO.data.email = "siggy@macromedia.com";
}
else
{
// mySO のすべてのデータをトレースする
trace( "Prefs: " );
for (var idx in mySO.data) {
trace( " " + idx +": " + mySO.data[idx] );
}
}
}
SharedObject.addListener( "Prefs", loadCompletePrefs );
// 共有オブジェクトを作成することができる
var Prefs: SharedObject = SharedObject.getLocal("Prefs");
このコードを実行すると二回目以降に以下のデータの内容が保存されているのが分かると思います。
出力結果。
mySO.data.name = "Sigismund";
mySO.data.email = "siggy@macromedia.com";
他の部分はPC用と同じく
mySO.dataがObject型なのでその中に自由に変数なりクラスなりを定義して使えばいいわけです。
例えば
mySO.data.age = 10;
mySO.data.TEL= 1234567890;
みたいな感じで。
もう一つ注意したい点として上記のページにも書いてありますが,Flash元のバージョンが異なるとデータが共有されないということです。
PC用のFlashでは同じURLのSWFファイルならバージョンが違っていても読み込むことが出来ます。
しかし、FlashLiteではデータを保存していたSWFファイルの内容が変更されていた場合(スクリプトの書き換えとかで)には保存していたデータが読み込めなくなってしまいます。
あと、携帯などのモバイル環境だとデータを保存できる容量が少ないという点も注意が必要です。
(実際どれぐらいなのかは分かりません、スイマセン;;)
以上。
