0

私は slick2d と MarteEngine ライブラリを使って 2D Java ゲームを作っています。これは、Java クラスのチェッカーを作成して以来、最大のプロジェクトです。私はまだプログラミングの概念に慣れておらず、最適な方法を使用して物事を成し遂げています。

私のゲームの基本的な構造は、あなたがゾンビの黙示録のプレイヤー/ヒーローであり、あなたを助けるために生存者を集めることができるということです. プログラミングで気になるところがたくさんあります。私の方法が私が望むものに適しているかどうかはわかりません。このゲームには現在、グリッド/タイル システムもありません。

いくつかのオープン ソースの Java ゲームを見てきましたが、それらは私のメソッドに対する私の質問に実際には答えていません。ですから、ここに私が不確かなことのリストを作成します。私の方法が適切であるかどうか、皆さんが確認/否定できることを願っています. このリストが長くなりすぎて申し訳ありません。入力しながら質問を考えています。

  1. ターゲット/攻撃- サバイバーは、ゾンビが銃のターゲット範囲内に入ると自動的にゾンビを攻撃します。これを行うには、すべての生存者に、すべてのゾンビまでの距離を (距離の公式を使用して) 取得させ、攻撃するのに最も近いゾンビを見つけます。私はこれを常にチェックしているので、より速いゾンビが近づいた場合、生存者はターゲットを変更します. ゾンビの場合、ターゲットを取得してそれに固執します (今のところ)。ゾンビは、距離式を使用して攻撃範囲 (約 50 ピクセル) 内にいるかどうかを常に確認します。範囲内にいる場合は停止して攻撃し、そうでない場合はターゲットに向かって移動します。

  2. 2D カメラ- 2D 環境のカメラは、ユーザーの代わりに世界を動かします。私の現在の方法は、マップ上のゾンビ/生存者/エンティティを配列リストに格納することです。最初に背景が調整され、次にすべてのリストが循環され、すべてのエンティティの x 値と y 値が変更されます。これは問題なく動作しているように見えますが、バックグラウンドでスライドしていることが実際にわかるものもあります。これを回避する方法がよくわかりません。

  3. ユーザー インターフェイス- UI の操作方法がまったくわかりません。これまで私が行ってきたことは、単純に背景を使用してボタン オブジェクトを生成し、それらを手動で並べることです。次に、マウスがボタンの領域のいずれかにあるかどうか、およびマウスをボタンの上に置いたときにクリックがあるかどうかを確認します。ブール値で切り替える 3 つの異なる背景とボタンがあります。ただし、背景とボタンのあるオブジェクトを使用して、その領域を再コーディングします。これはUIを行う正しい方法ですか?

  4. パス ファインディング- パス ファインディング システムはまだありません。グリッドシステムに固執する必要がありますか? 私はむしろ、エンティティが地形に沿って自由に移動し、奇妙な正方形から正方形への動きではありません。

  5. 選択- 生存者を選択し、アップグレードし、その他のランダムなものを選択できるようにします。私の現在の選択方法は、マウスの X と Y がどこにあるかを常に確認することです。マウスからすべての生存者までの距離を取得し、30 ピクセル以内かどうかを確認します。次に、クリックがあるかどうかを確認します。クリックがある場合は、生存者を選択し、他のすべての選択を解除します。オープンスペースをクリックした場合にすべての生存者の選択を解除する方法をまだ見つけようとしています. これを行うためのより良い方法はありますか?

  6. 物を拾う- 前に言ったのと同じ方法。プレイヤーから拾えるアイテムまでの距離をチェックします。アイテムがプレーヤーから 30 ピクセル以内にある場合は、それを拾います。私が推測する瞬間にはうまくいくようです。たぶん、これを行う他の方法はありません。

  7. アニメーション- スプライトでアニメーション化する方法は理解していますが、確認したいだけです。したがって、7 種類の銃を撃つ必要がある場合、各スプライトで正確なタイミングを持つ関数を手動で作成する必要がありますか。私がショットガンを持っているとしたら、反動、ポンプフォワード、短い一時停止、ポンプバック、そして再び準備が必要です. ピストルの場合、本当に反動だけが必要です。それでは、これらのアニメーションごとに独自の関数を作成する必要がありますか?

この長い質問のリストを入力して申し訳ありません。この件に関する情報をできる限り収集しようとしていますが、この件に関する多くの例を見つけることができませんでした。はいまたはいいえの答えだけでも、どんな答えでも大歓迎です。前もって感謝します!

4

1 に答える 1

1

2D カメラ:

各エンティティの位置を変更すると言うときに何をしているのか正確にはわかりませんが、私が行う方法は、独自の x、y、幅、高さ、およびカメラを移動するメソッドを持つ Camera オブジェクトを使用することです。次に、ドローサイクルで:

for (every Object on the map)
{
    if (Object is within Camera bounds)
    {
        // Draw the Object at the Object-xy minus the Camera-xy
        // This will draw the Object at its position relative to the camera
        // and won't waste time drawing things that are not within camera bounds
    }
}

ターゲット/攻撃

あなたの考えは正しいですが、すべての生存者に対してすべてのゾンビをチェックすると、多くの計算が必要になり、(ゾンビと生存者の数によっては) ゲームが大幅に遅くなる可能性があります。衝突検出の場合も同じで、すべてのオブジェクトを他のすべてのオブジェクトに対してチェックして、それらが衝突しているかどうかを確認するには多くの時間がかかります。すべてに対してすべてをチェックする必要がない方法があります。「空間パーティショニング」を読むことをお勧めします。私は slick2d を使用したことはありませんが、おそらくそのような機能が既に実装されているでしょう。

物を拾う

ターゲット/攻撃と同じように、アイテムやアイテムを拾うことができるものが多すぎると、フレームレートが大幅に遅くなります.

選択中

これは選択を行うべき方法ではありませんが、私自身は選択をあまり使用する必要がなかったので、最善の方法について完全には確信が持てません。おそらくこれを行う方法を探してみてください. いずれにせよ、クリックをチェックするだけで現在の方法を改善できます。すべてのフレームをチェックする必要はなく、クリックがあったときだけチェックします。

現時点で私がお手伝いできることはこれだけです。少なくとも、あなたの役に立てば幸いです。

于 2012-07-12T06:45:17.327 に答える