ゲーム開発は初めてです。学ぶために、Androidプラットフォームでこのゲームを再現しています。上記のリンクでゲームプレイのビデオを見ることができます。シンプルなゲームです。
私はゲーム開発の開始に関する多くの記事を読みました。それらのほとんどすべてが、別のスレッドでゲームループを使用することを推奨しました。ただし、この特定のゲームでは、別のスレッドを開始する必要がありますか?
ゲーム開発は初めてです。学ぶために、Androidプラットフォームでこのゲームを再現しています。上記のリンクでゲームプレイのビデオを見ることができます。シンプルなゲームです。
私はゲーム開発の開始に関する多くの記事を読みました。それらのほとんどすべてが、別のスレッドでゲームループを使用することを推奨しました。ただし、この特定のゲームでは、別のスレッドを開始する必要がありますか?
回答:
ゲームループはシンプルであるため、一般的に推奨されます。ほとんどすべてのゲームは、ループを使用して適切に開発および実行できます。ほとんどのゲームは、適切に機能するために1つ必要です。
たとえば、ほとんどの物理エンジンは、適切なシミュレーションのために信頼できる一定の更新を必要とします。アニメーションやその他の動的なコンテンツやグラフィックは、変更などを行うたびに更新する必要があります。別名ループを使用することで、実質的に無料で取得できるものもあります。
ここで、ループを別のスレッドで実行する必要がないことに注意してください。実際、ほとんどのゲームでは、単純にするためにメインスレッドでループを実行します。私のAndroidプロジェクトでもこの原則に従っています。
ここで本当の問題は、あなたが提案する代替案は何ですか?確実に入力を取得し、更新を行い、自分に合ったフレームを描画する方法について別のアイデアがある場合先に進んでください!それ以外の場合は、ゲームループが最も簡単な方法かもしれません。
いいえ、別のスレッドは必要ありません。あなたがあまりにも激しいことをしていない場合(これは、あなたが私たちに示したゲームではそうではないようです)、すべてをメインスレッドで行うことができます。
多くの処理を行っている場合や、UI /入力が応答しなくなるという問題が発生している場合は、2番目のスレッドが必要です。たとえば、より複雑なゲームでは、AIが次の動きを計算しているときにUI /入力が応答しなくならないようにします。ゲームは主にユーザー入力に応答し、ビジュアルを更新しているように見えるため、2番目のスレッドは必要ありません。
「ループは必要か」という元の質問への回答。
いいえ。ただし、代替手段はより複雑で、実装が難しく、ほとんど使用されません。
ゲームは本質的にインタラクティブです。少なくとも、それは入力を待って出力を更新しています。これを行う最も簡単な方法は、with a loopです。そのために新しいスレッドを生成する必要はありません。
あなたが言及したゲームはシンプルに見えますが、インタラクティブなビジュアルとサウンドがあり、ユーザー入力に基づいてそれらを常に更新します。
ゲームループに代わるものはあまりありません。ある種の割り込みベースのシステムが可能かもしれません。ただし、このようなシステムは複雑さを増し、決定論などの他の要因を減らします。ゲームループが非常に一般的であり、実装が簡単で、理解しやすく、柔軟性があり、優れた仕事をするのには理由があります。
実際の質問への回答(ゲームループは別のスレッドにある必要がありますか):
多くの場合、別のスレッドの使用を推奨するのは、UIの対話性を妨げるような重い処理を望まないためです。あなたは、別のスレッドがために必要とされている場合伝えることができる唯一の一つですあなたのゲーム。現在のデザインのメインゲームループがUIの応答時間を妨げるかどうかは、エンジンとフレームワークに完全に依存します。他のことを考える理由がない限り、(小規模なプロジェクトでは)通常はそうならないと思います。
コードを別々のスレッドに保持するもう1つの理由は、コードをモジュール化してシンプルにすることです。無関係な2つのコードが混在していると、多くの場合、長期的にはコードの可読性や保守性が低下します。
ゲームループはそれ自身の別のスレッドで実行する必要がありますか?たぶん。応答時間またはコードに問題があり、重い処理に関係なく応答するために複数のUIアイテムが必要な場合、または設計上の理由で同時に発生する特定のタスクにコードを分割したい場合は、それに合わせてください。ただし、高度なプログラミング手法と見なされます。
単純な、しかしおそらく素晴らしい例ではない2人のプレイヤーのゲームです。ユーザー入力を処理し、プレーヤーキャラクターインスタンスの状態変化に変換するクラスの2つのインスタンスを実行することができます。
一部のフレームワークは、ActionScript3.0のように、イベント/割り込みベースのシステムを利用することを推奨/要求します。これらの場合、ループコードは通常、OnEnterFrame
1秒あたり20〜60または120回発生するイベントまたは同様のものに移動します。
元の質問への回答(メインループが必要ですか):
すべては、プログラムカウンターに要約されます。所定の時間を超えて実行され、コードが生成されないゲームを作成している場合、ユーザーのPCに、処理済みの命令と、何が変更される可能性があるかを繰り返すように親切に要求する必要があります。一方、状態(ゲームのオブジェクトとグローバルに格納されている値)です。
指示を繰り返す必要があることがわかっているので、このタスクを完了して同じ指示を継続的に処理するにはいくつかの方法があります。これらの方法はすべて、プログラムカウンターを現在関連する命令に戻すことを含みます。コードが繰り返される原因となる最も一般的な制御フローステートメントはループと呼ばれ、もう1つはgoto
最近のコードではほとんど使用されず、この場合も同様の効果を持つステートメントです(完全には関係ありません)。
前の質問に答えるために、ループが必要ですか?そうです。