Haxe: クラスインスタンスを Serializer にて文字列に変換し、クラスの構造変更後に Unserializer でインスタンスの復元は可能かのテスト
ゲーム制作でのデータ保存処理周りで、動作が不明な箇所があったため、記事タイトル内容の検証を行いました。
クラスインスタンス検証
検証手順
(1)以下の様な gold を保持するための Record クラスがあるとする
class Record{ public var gold(default, null):Int; public function new(){} }
(2)Record インスタンスを Serializer で文字列化
(3)文字列化したデータを Flash の場合 SharedObject, JavaScript の場合 Cookie などに記録
(4)Record クラスの内容を以下のように変更してコンパイル
//メンバ変数増加 class Record{ public var gold(default, null):Int; public var experience(default, null):Int; public function new(){} }
あるいは以下のように何もメンバ変数がない状態にしてコンパイル
//メンバ変数削減 class Record{ public function new(){} }
(5) (3)で保存していた文字列データを取り出す
(6) Unserializer で Record クラスインスタンスの復元は可能かどうか検証
結果
■ JavaScript ターゲット
メンバ変数増減に関わらず復元可能
■ Flash ターゲット
メンバ変数増加: 復元可能
メンバ変数減少: 復元不可能(Unserializer でエラー)
typedef インスタンス検証
クラスインスタンスだけではなく typedef インスタンスの検証も行いました。
typedef Record = { var gold:Int; }
結論としては JavaScript, Flash ターゲット共に、メンバ変数増減に関わらず typedef インスタンスは復元可能でした。
変数をまとめて丸ごと保存したい場合、typedef を利用するのが無難でしょうか?
[ FLASH ] [ FLASH ] [ tips ] 投稿者 siratama : 2015年07月22日 19:32