1

私はゲームプログラミングに非常に慣れていないので、私の非常に漠然とした質問を許してください:P

ゲーム プログラミングを独学する手段として、iPhone で OpenGL を使用した 2D ゲームの作成に取り組み始めました。エンジンを作成し、衝突検出の動作やその他のアニメーションなどを取得するところまで来ましたが、実際にプレイ可能なものを作成する必要があり、最初の大きな問題はレベルです。私のプロジェクトでは、タイル マップを使用します。レベルと私の質問は次のとおりです。レベルを「設計」するにはどうすればよいですか? つまり、プログラマーはマップのどの時点で特定の敵が登場する必要があるかをどのように知るのでしょうか? レベルで起こる特定のことをどのように指定できますか? 全体として、(プログラミングの観点から) レベルを設計し、それをロードして使用できるようにするための方法論はありますか? ゲームプログラマーはこれをどのように行うのですか? もちろん、これには敵の AI 部分があることを知っているので、もちろん、すべての敵のすべての動きを事前に書いているわけではありませんが、少なくとも基本的には、それぞれがいつ作用するか、およびそのようなことを知っていますか? 助けてくれてありがとう。また、始めたばかりなので質問があいまいでしたら申し訳ありません:D

4

3 に答える 3

3

それは通常、ニーズに合わせて行うものです。唯一の正しい方法はありません。

何年も前に取り組んだ 3D プラットフォーマー ゲームでは、エディターとゲーム ロジックを設計しました。ゲーム ロジックはすべて C++ 階層であり、各オブジェクトにはメッセージを他のオブジェクトに渡す機能がありました。ドアを開くレバーをアクティブにするには、単純な「トリガー ゾーン」を設定するだけです。これは、それ自体がロジック オブジェクトであり、単純に、ユーザーが球体の内側にいるかどうかをチェックします (レベルが特定の「ゾーン」に編成されているため、私は現在のゾーンにないトリガーをチェックする必要はありません)。次に、トリガーがレバーをアクティブにします (これにより、アニメーションが開始されます)。次に、ドアを引くとドアが作動するようにレバーが設定されました。任意のオブジェクトがトリガーになる可能性があるため、トリガーを連鎖させるのは簡単でした。特定のポイントにトリガーを割り当てることもできます。AnimationBegin、AnimationEnd、または、アニメーションの特定のキー フレームにキー設定することができます。各オブジェクトはこのようなトリガーを持つことができるため、トリガー イベントを選択し、トリガーが発生したときにどのオブジェクトをアクティブにするかを設定できるようにエディターを設計するのは簡単でした。もちろん、これらのトリガーは、より厄介なトラップのためにオブジェクトの動きを同期させるなどのことを可能にするアニメーションに合わせて発生する可能性があります...

これは 1 つの方法にすぎず、私たちが必要としていたものに対して見事に機能しました。この問題にアプローチするには、さまざまな方法があります。正しい方法は 1 つではありませんので、「ゲーム ロジック」や「ゲーム オブジェクトの動作」などを読むことをお勧めします。さらに言えば、どのような種類の相互作用を求めているかを把握し、必要な状態遷移について考える必要があります。直感に反して、実際のロジックを記述するよりも、フレームワークを設計する方がはるかに複雑であることが常にわかりました。

幸運を!

于 2011-01-08T00:16:13.367 に答える
3

昔ながらの方法から始めることができます: Mob を静止させます。マップ データには、Mob の場所、種類、移動方法を含めることができます。慎重に設計されたマップは、ゲームを非常にやりがいのある楽しいものにすることができます。

AI の場合、通常、複数のアルゴリズムのハイブリッドが必要になります。シングルプレイヤーのフリーモードの StarCraft のようなことをしている場合、AI はヒューリスティック (つまり、プレイヤー ベースを圧倒的なパワーで溢れさせ、2 番目のベースを作成するなどの事前に準備された戦略) と最小最大アルゴリズムの決定 (つまり、エンカウンターでは、チェスで行うように、最も脅威的なユニットを排除します)。これは興味深いトピックであり、多くの仲間のプログラマー/科学者のキャリアの基礎でもあります。

于 2011-01-08T00:22:53.360 に答える
0

このページをチェックしてください。ゲーム開発者向けのリソースがたくさんあります

于 2011-01-08T00:07:50.303 に答える