0

ここで見つけた 2 つのプロジェクトを調べました: AndEngineJb2dJson AndEngineRubeLoaderExtension

知っている人もいると思いますが、私はローリング シーン ベースのゲームを開発しています。XML ファイルからすべてのエンティティをロードし、ロード シーンで作成しています。最近、ゲームの幅を広げています。これにより、レベル全体で約 500 エンティティ (250+- ではなく) しかし、これはパフォーマンスの問題を引き起こします。

私の質問は、これらの Rube ローダーがパフォーマンスの問題をサポートしている場合、何らかの改善を行うか、通常の andengine ローダーと同様に、XML \ JSON の各エンティティを手動でロードする必要があるということです。

同じ量のエンティティを使用してローリングシーンベースのゲームを開発し、それを実装する正しい方法を教えてくれる人はいますか?

ありがとう

4

1 に答える 1

2

特定の実装についてあまり詳細を提供していないので、このタイプのゲームを処理する一般的な方法を提供します。

最初に、ゲーム ワールドの「アクティブな」エリアを定義する必要があります。これは、シミュレートする必要があるワールドのエリアです (つまり、このエリア内のエンティティが移動し、ワールドと相互作用します)。

世界のレイアウトは次のようになります。

例の世界

この例では、世界は灰色のブロックであり、画面の境界 (黒いフレーム)を超えて広がっています。赤いフレームはアクティブな領域を示しています。ディスプレイのサイズを超えていますが、世界全体をカバーしていないことに注意してください。この領域のサイズは、特定の実装/ニーズによって異なります。

アクティブ エリアは通常、プレーヤーと一緒に移動するため、プレーヤーからの距離 (2 方向) として簡単に表すことができます。

基本的な考え方は、エンティティ (青色) は、アクティブな領域内にある間だけシミュレートされるというものです。アクティブ領域の右側にあるすべてのエンティティは、そこに入るまで非アクティブである必要があり、その時点でシミュレーションを開始できます。このため、アクティブ領域は、エンティティが初期時間を確保できるように、表示領域の右側にある程度拡張する必要があります。表示される前にシミュレーションを実行します。エンティティがアクティブな領域 (左側) を離れると、シミュレーションを停止し、必要に応じて削除できます。

したがって、例の画像では:

  • E1はすでにアクティブ エリアを通過しており、不要になっています (無効化/削除できます)。
  • E2はアクティブで表示されています (現在表示されています)
  • E3はアクティブですが、まだ表示されていません
  • E4E5はまだアクティブではなく、プレイヤーが近づいてアクティブ エリアに入るとアクティブになります。

エンティティの扱い方については、ワールドの大きさやエンティティの数などによって異なります。

1 つの方法は、エンティティがアクティブ領域に入ったらエンティティを作成/ロードすることです。この場合、表示領域に入る前にエンティティを作成/ロードするのに十分な時間を確保できるように、エンティティをディスプレイの右側に十分に拡張する必要があります。これは、何千ものエンティティが存在する可能性がある大規模な世界に最適なアプローチです。この場合、それぞれをチェックせずに大量のエンティティを処理から除外できるように、世界に何らかの細分化が必要になる場合があります-それぞれがその中にあるエンティティを含む固定サイズの「ブロック」の配列が機能します単純な 2D 横スクロールでは、ほとんどの場合問題ありません。

もう 1 つのアプローチは、開始時にすべてのオブジェクトをロードし、それらがアクティブな領域に入ると、シミュレーションの更新 (物理、動き、衝突検出など) のみを実行することです。このアプローチは、より小さな世界でうまく機能し、より簡単に実装できます。

于 2014-06-20T08:32:41.043 に答える