新ブログ「ごんフラブログG2」

WordPressで始めてみました

[海外]バンドルされた複数のゲーム・PCアプリが購入できるサイト
humblebundle.com


ごんたろうのぼやきトップ

2014年06月08日

【AS3】Shared Objectについて。

Flashさん(CS3)の
Shared Object、ローカルPC内に形式は限られているが
いわゆるCOOKIEのように(クッキーさん・いつ聞いても美味しそうな名前w)
データを保存しておける、特にゲームなどでは有り難い機能。
FlashMX(Ver6)から実装。のはずw


無駄に数日悩んでしまったので備忘録として…。
AS1.0やAS2.0ではたしか、文字列しか保存できなかった…はず。

AS3.0では配列や連想配列なども保存できる様になった。
が、しかし。この仕様変更に甘えるとどえらいことになる。
「Shared Object 書き込み タイミング」などで検索しても
こちらの思っている内容がヒットすることがなかった。

内容は書き込みボタンをクリックして書き込みを行っても
タイムラグが生じ、書き込み処理のウィンドウ(等)を閉じて
しばらくしてから書き込みが完了するという現象。

どういうことかというと、書き込みボタンを押して
しばらくしてから書き込み処理が完了するため、
ボタンを押した時点の状態と実際に書き込まれるデータに
差が出てしまう。
例えばポイント0,0地点でデータを保存したのに、
実際書き込まれたのはポイント0,5地点で保存されるという
結構困る現象でした。

結果、おそらく書き込みに時間がかかっているということ
なんだろうけど、書き込み用にウェイトをかけても
あまりいい解決策にならなかった。
たぶんFlash側でデータの変換を行いながら記録しているのか
ここが結構ネックなのでは?という結論。


おまけに実際使っていたShared Objectのデータ容量が
「8KB」という結構でかいものになっていた。

無駄に無駄に無駄に数日悩み、
こちらに手間がかかるけど、配列や連想配列を
文字列に変換して保存してみよう、、、という方法。
要素数の分だけ、特定の文字で区切り、場合によっては
改行コードなども使って分ける。
それを文字列として記録、保存。

読み込み時にはこの文字列データをsplit等で分解し、
元の配列や、連想配列に戻してやるという作業。


実際にやってみた。
すると、使用容量8KBが(ものによっては8KBを少し越えた)
なんと2KB以下にまで減ってしまったwwwwww
ここにたどりつくまでにも、無駄なキーや変数自体を削除して
スマート化を頑張ってみたのだが解決せずで、


最終的に全部文字列で保存したら解決したwという話。


書き込み用に8秒ほどウェイトをかけていたのだが
(それでもやばい時があったw)
2秒ほどにまで縮められた。おそらく1秒でも
問題ないだろう…。この辺の微調整は最後に。


【結論】
SharedObjectの保存は全て「文字列」に。
書き込み時は
SharedObject.flush();
SharedObject.close();
を入れる。
(flushをいれたらcloseはいらんのか?)

戻す時にはString()やNumber()、Boolean()などで
型を戻すことも忘れずに。
posted by ごんたろう(Gontaro-Soft) at 20:38 | Comment(0) | ActionScript3.0
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
ブログランキング・にほんブログ村へ
にほんブログ村

インターネット・コンピュータランキング