2017-11-02 11 views
1

私は単純な2Dゲームを作成しています。私は各レベルを生み出すプレイヤーキャラクターと敵を持っています。すべてのレベルには、1〜6のカウントを持つ独自の敵のセットがあります。プレイヤーキャラクターは、さまざまなクラスにレベルアップすることができます。つまり、すべてのクラスに独自のテクスチャがあります。私はJSONについて読ん敵をどのように配置するかを(敵の異なる数の異なるレイアウトを)ゲームを伝えるためにどのようにプレイヤキャラクタ(プレイヤテクスチャ、属性)に関するデータを格納するための最良の方法は何 文字情報を保存する最良の方法

が、どうやら大量のデータがある場合は遅くなります(私のケースがそのように遅いかどうかはわかりません)。私の場合は、約30の異なるプレイヤーパスと多くの異なる敵の位置の多くのケースがあります。

+0

「プレーヤーパス」とはどういう意味ですか?あなたは、いくつかの文字の一つ一つの動きを記述するXの何千、Yのペアといくつかの配列を持つべきではありません。代わりに、いくつかの重要な位置を保存し、それらの間の動きを補間する必要があります。 – MilanG

答えて

1

テクスチャ、サウンド、タイルマップ、フォントなどを保存するAssetManagerクラスを使用してください。リアルタイムで優れたテクスチャやその他のリソースをロードします(FPSを失うことなく)。また必要がない場合は、unloadのリソースも利用できます。必要があるときにはもう一度loadにしてください。

JSONの記述方法はそれほど遅くはありません。すべてのエンティティに固有のデータのみを保存します。例えばゾンビの敵:

{ 
"zombie" {"x": 100, "y": 10}, 
"zombie" {"x": 100, "y": 20}, 
} 

他のデータはクラスで宣言できます。

class Zombie { 

    int width; 
    int height; 
    Texture texture; 

    int x; // initialize later, when load from JSON 
    int y; 

    public Zombie(Texture texture, int width, int, height){ 
     this.texture = texture; 
     this.width = width; 
     this.height = height; 
    } 

}

0

私はPreferencesクラスを使用しています。非常に簡単で便利です。プレーヤーの現在のテクスチャを保存するには、テクスチャ自体を保存する必要はありません。テクスチャインデックスまたはその名前を保存することができます。

Preferences progress; 
... 
progress.putInteger("playerTextureIndex ", 0); // for save 
playerTextureIndex = progress.getInteger("playerTextureIndex ", 0); // for load 

次に適切なテクスチャを開始します。私はタイル張りの地図(.tmx)の位置を定義したい敵の位置決めのための

0

。エディタ内では、位置をマークするための単純な四角形を作成します。

コードでは、すべてMapObjectsを取得し、それらをBox2Dボディとフィクスチャに割り当てます。タイルで完璧に動作するスプライトのサイズを持つことはあまり一般的ではないので、通常は幅と高さを編集します。

次に、Spriteクラスのコンストラクタ内で、Box2Dボディを取ります。

アセットの場合、ロードして保存するには、AssetManagerを使用するのが最適です。非常に高速な時間内にすべての資産をロードし、ロードせずにロードするよりはるかに優れたソリューションです。

私はこの答えはあなたを助け、ご不明な点がある場合は、以下のコメントを投稿してくださいね!

+0

は、これまでのところ、私が見るように、そのエディタは私の問題を解決する可能性があります、ありがとう:) –

+0

どういたしまして!はい、私は個人的には、このソリューションがこの問題の最もクリーンで私の好みの方法だと思います。タイルマップは2Dタイルマップで最も一般的なフォーマットであり、ほぼすべてのゲームエンジンでサポートされています。 –

関連する問題