5

HaxeFlixel ゲームでセーブ機能を設定しようとしています。

いくつかの背景: 問題のオブジェクトはPlayer、 を拡張する のインスタンスですFlxSprite。セーブデータは、私が作ったカスタムクラスのインスタンスに保存されます。そのインスタンスは に保存されStringMap(キーは保存名)、 の変数にシリアライズすることで保存されますFlxSave

セーブデータの作成と書き込みは正常に動作します。ただし、セーブ データを読み込むと、「無効なフィールド: ピクセル」というメッセージが表示されてゲームがクラッシュします。pixelsは FlxSprite のフィールドですが、シリアル化された文字列でそのようなフィールドは最初ではないため、おそらくそうではありません。

役に立つ場合、そのフィールドの宣言は次のy6:pixelsnとおりです。つまり、次のとおりです。

  • yという名前のフィールドを開始します...
  • 6:長さ 6 の文字列...
  • pixels(文字列)
  • nヌル
4

1 に答える 1

3

このコード行から、pixels実際には実行時に変数*ではないことがわかります。そのため、値を に代入しようとすると、アンシリアライザーがクラッシュしpixelsます。しかし、シリアライザーが最初にフィールドをシリアライズした理由については、さらに調査する必要がありpixelsます。なぜなら、それは実行時に実際には存在してはならないからです。

注*: のアクセサはpixelsare(get, set)でありpixels、実行時に実際のプロパティにはなりません。詳細はこちらをご覧ください

原則として、a FlxSprite(またはその他の複雑なオブジェクト) を直接シリアライズすることはお勧めしません。むしろ、必要な情報 (x/y 位置や hp など) を抽出し、それらのみをシリアル化する必要があります。

于 2015-07-06T06:27:53.697 に答える