タグ付けされた質問 「game-loop」

実行中のゲームプレイを処理する中心的なコードループ。最も基本的な状態では、入力を受け入れ、エンティティのアクションを解決し、シーンをレンダリングします。

3
C ++の有限状態マシン
そのため、FSMを使用してゲームの状態管理を行うこと、FSMとは何か、1つを構築するためにスタックまたは状態のセットを使用することについて多くのことを読みました。私はすべてを経験しました。しかし、私はそのためにFSMの実際の適切に設計された実装を書くことにこだわっています。具体的には、どのようにして状態間を移行する問題をどのようにきれいに解決するのか、(どのように)状態が他の状態からのデータを使用できるようにするのか、などです。C ++で実装を設計および作成するためのヒントや、さらに良いコード例はありますか?

9
死んだエンティティをゲームループから削除するにはどうすればよいですか?
わかりましたので、ループして更新するすべてのエンティティの大きなリストがあります。AS3では、これを配列(動的な長さ、型なし)、ベクター(型付き)、またはリンクリスト(ネイティブではない)として保存できます。現時点では配列を使用していますが、より高速な場合はベクターまたはリンクリストに変更する予定です。 とにかく、私の質問、エンティティが破壊された場合、リストからエンティティを削除するにはどうすればよいですか?その位置を無効にするか、スプライスアウトするか、フラグを立てて「私をスキップして、死んだ」と言うことができます。私はエンティティをプールしているので、死んだエンティティはある時点で再び生きる可能性が高いです。コレクションの種類ごとに、私の最善の戦略は何ですか?また、コレクションの種類と削除方法のどの組み合わせが最適ですか?
16 game-loop 

2
半固定または完全固定のタイムステップ?
私はiPhone shmupを作成しており、使用するゲームループのタイプを決定しようとしています。半固定のタイムステップまたは完全に固定のタイムステップを使用したい。 タイムステップが半固定の場合、0回以上のupdate(FIXED_INTERVAL)呼び出しを行い、その後、ゲームループごとにdt <= FIXED_INTERVALのupdate(dt)呼び出しを1回行います。私が理解しているように、この方法の欠点は、更新ごとに変数dtを仮定する必要があるため、物理update(dt)ロジックのプログラミングがより難しくなることです。そして、毎回同じではない浮動小数点値のために、ゲームの各実行がわずかに異なることも耳にしました。 次に、完全に固定されたタイムステップを使用して、0回以上のupdate(FIXED_INTERVAL)呼び出しを行い、その後、ゲームループごとにdt <FIXED_INTERVALの補間(dt / FIXED_INTERVAL)呼び出しを1回行います。 だから、私が本当にしなければならない大きな決断は、変数dtを使ってupdate(dt)を実装するという課題に取り組むのか、補間を実装するという課題に取り組むのか、ということです。 今、私が読​​んだことから、大部分の人々は完全に修正されたものを使って補間を行うと言っています。しかし、補間の実装について考えると、変数dtを使用したupdate(dt)よりもはるかに複雑になりそうです。これは、補間を使用する場合、前の状態と現在の状態の両方を記憶する必要があるためです。したがって、補間を使用する場合は、個々のゲーム状態全体を抽象化する追加の間接レイヤーを作成する必要があります。補間を使用する必要がない半固定タイムステップでは、ゲーム状態の抽象化を考え出す必要はありません。ゲーム状態は常に1つだけであり、単に敵と敵を表す「グローバルアレイ」であるためです。弾丸など それで、より実用的な選択は何ですか:物理的な更新が変数dtで複雑になる可能性があることを知って、半固定で実装しますか?または、補間を実行するために以前の状態と現在の状態を追跡できるように、完全に固定された状態を使用してゲーム状態の抽象化を試みますか?
15 game-loop 

2
2Dサイドスクローラー用の「最適な」ゲームループ
2Dサイドスクローラーのゲームループの「最適な」(パフォーマンスに関して)レイアウトを記述することは可能ですか?このコンテキストでは、「ゲームループ」はユーザー入力を受け取り、ゲームオブジェクトの状態を更新し、ゲームオブジェクトを描画します。 たとえば、深い継承階層を持つGameObject基本クラスを持つことは、メンテナンスに適しています...次のようなことができます: foreach(GameObject g in gameObjects) g.update(); しかし、このアプローチはパフォーマンスの問題を引き起こす可能性があると思います。 一方、すべてのゲームオブジェクトのデータと機能はグローバルになります。これはメンテナンスの頭痛の種ですが、最適に実行されるゲームループに近いかもしれません。 何かご意見は? 最適なゲームループ構造の実用的なアプリケーションに興味があります。優れたパフォーマンスと引き換えにメンテナンスの頭痛がします。

3
ゲームループ、条件を1回確認し、何かをしてから、もう一度やる方法
たとえば、ゲームクラスがありint、プレーヤーの生活を追跡するを保持しています。条件付き if ( mLives < 1 ) { // Do some work. } ただし、この状態は引き続き発火し、作業は繰り返し行われます。たとえば、5秒でゲームを終了するタイマーを設定したいです。現在、フレームごとに5秒に設定し続け、ゲームは終了しません。 これはほんの一例であり、ゲームのいくつかの領域で同じ問題を抱えています。何らかの条件を確認してから何かを1回だけ実行し、ifステートメントのコードを再度確認したり実行したりしないようにします。頭に浮かぶ可能性のある解決策のいくつかboolは、条件ごとにを持ちbool、条件が発生するタイミングを設定します。しかし、実際には、これはboolsクラスフィールドとして、またはメソッド自体内に静的に格納する必要があるため、大量のを非常に扱いにくくなります。 これに対する適切な解決策は何ですか(私の例ではなく、問題の領域のために)?ゲームでこれをどのように行いますか?
13 c++  game-loop 

4
ロールプレイングゲームでの戦闘シーケンスのプログラミング
プレイヤーが周りを回ってモンスターと戦う短い「ゲーム」を書こうとしていますが、戦闘の処理方法がわかりません。 たとえば、「Warrior」と「Troll」があるとします。二人はどのように互いに戦うのですか?私は次のようなことができることを知っています Conan = Warrior.new(); CaveTroll = Troll.new(); Conan.attack(CaveTroll); CaveTroll.attack(Conan); しかし、ゲームのどの部分がモンスターを制御しますか?上記のシーケンスをループに入れて、それらの1つが死ぬまで続けますか?または、ゲームの「エンジン」には、戦闘に特化した部分が必要ですか?または、これはその行動を処理する必要があるトロールの人工知能の側面ですか? また、誰が/何がモンスターの行動を決定しますか?トロールは、たたく、蹴る、噛む、呪文を唱える、ポーションを飲む、魔法のアイテムを使うことができるかもしれません。ゲームエンジンは、トロールが実行するアクションを決定しますか、それともトロールクラスが管理するものですか? 申し訳ありませんが、これ以上具体的にすることはできませんが、これをどの方向に進めるかについてのガイダンスが必要です。

2
ゲームループ内でゲームを一時停止する
ゲームループ内では、Pを押すとゲームが一時停止します。つまり、ゲームループは実行されなくなります。問題は、このループが停止した後、ループ自体の中にあったため、ループを再開するためにPを再度押すことができないことです。Pをもう一度押すとループが再び機能するようにするにはどうすればよいですか?
12 game-loop 

3
「一定のゲーム速度最大FPS」ゲームループで非常に混乱
最近、ゲームループに関する次の記事を読みました:http : //www.koonsolo.com/news/dewitters-gameloop/ 推奨される最後の実装は、私を深く混乱させます。私はそれがどのように機能するか理解していません、そしてそれは完全な混乱のように見えます。 私は原則を理解しています:ゲームを一定の速度で更新し、残っているものはできるだけ多くゲームをレンダリングします。 私はあなたが使用できないと考えています: 25ティックの入力を取得 975ティックのゲームをレンダリングする あなたは2番目の最初の部分の入力を取得するだろうし、これは奇妙に感じるので、アプローチ?それとも、記事で何が起こっているのですか? 基本的に: while( GetTickCount() > next_game_tick && loops < MAX_FRAMESKIP) それはどのように有効ですか? 彼の価値を仮定しましょう。 MAX_FRAMESKIP = 5 メインゲームループが言う前に、初期化の直後に割り当てられたnext_game_tickを想定しましょう... 500。 最後に、ゲームにSDLとOpenGLを使用しており、OpenGLはレンダリングのみに使用されているためGetTickCount()、SDL_Initが呼び出されてからの時間が返されると仮定します。 SDL_GetTicks -- Get the number of milliseconds since the SDL library initialization. ソース:http : //www.libsdl.org/docs/html/sdlgetticks.html 著者もこれを想定しています: DWORD next_game_tick = GetTickCount(); // GetTickCount() returns the …

2
これらの2つのコードのどちらが「より良い」ですか?ローカル変数またはクラス変数を作成しますか?
私はより多くのゲームを作り、より愚かな質問をしています。 うまくいけば、これは非常に簡単です。剛体に力を加えてPlayerオブジェクトを移動するだけの非常に基本的なクラスを作成していますが、rbへのクラス参照を作成するのか、Update every frame内のローカル変数を作成するだけなのでしょうか?(これは、Monobehaviour.GameObject unity親クラスにすでに存在していることを念頭に置いてください)。 多くのローカル変数を実行するとループ全体の速度が低下するのではないかと思います(ローカルとは、クラスの先頭ではなく、関数自体の内部を意味します。正しい用語を使用してください)。 これが私が言いたいことです、私がそれをすることを考えていた2つの方法: public class Player : MonoBehaviour { private void FixedUpdate() { Rigidbody rb = GetComponent<Rigidbody>(); float v = Input.GetAxis("Vertical"); rb.AddForce(v * rb.transform.forward * Const.walkForce); } } または... public class Player : MonoBehaviour { Rigidbody rb; private void Awake() { rb = GetComponent<Rigidbody>(); } private …
11 unity  c#  game-loop 

3
UPSとFPS-何を制限する必要がありますか。その理由は何ですか。
現在C ++とSDL2を使用してゲームを作成していますが、疑問に思っていることが1つあります。毎秒のフレーム数(FPS)や毎秒の更新数(UPS)を制限することは理にかなっていますか? UPSを制限すると、基本的にゲームの速度を制御できると思います。プレーヤーが1更新あたり1ピクセル移動し、常に毎秒30回更新する場合、30ピクセル/秒の速度で移動します。 1秒あたりの計算量が減るため、おそらくCPUも解放されます。FPSを制限すると、1秒あたりのドローコールの量が減少するため、GPUが軽減されます。そのすべてを正しく理解できていれば幸いです。そうでない場合でも、自由に修正してください。 私の質問は-私のゲームで何を制限すべきですか?FPS?UPS?どちらも?どちらでもない?これに対する別のより良いアプローチはありますか?これはほとんどのゲームでどのように行われ、その理由は何ですか? 回答は大歓迎です!
11 game-loop  logic  sdl2 

2
UnityのUpdateとFixedUpdateの違いは何ですか?
Update()グラフィックスとFixedUpdate()物理学に使用するように言われましたが、を使用すると入力が登録されないことがありますFixedUpdate()。私Update()がすべてのために使用する場合でもそれはうまくいきます。 私は気にする必要がありますかFixedUpdate()、それとも何か間違っていますか?
10 unity  c#  game-loop 

4
単純なゲームでは、ゲームループの別のスレッドが必須ですか?
ゲーム開発は初めてです。学ぶために、Androidプラットフォームでこのゲームを再現しています。上記のリンクでゲームプレイのビデオを見ることができます。シンプルなゲームです。 私はゲーム開発の開始に関する多くの記事を読みました。それらのほとんどすべてが、別のスレッドでゲームループを使用することを推奨しました。ただし、この特定のゲームでは、別のスレッドを開始する必要がありますか?

2
Java 2Dゲームプログラミング:ゲームループを作るためのさまざまなアプローチ
私はJavaゲームプログラミングに不慣れですが、ゲームループを作成するためのいくつかの異なるアプローチを見てきたので、読むほど、混乱します。1. Timerクラスを使用する標準的なアプローチ(少ないようです)正確)。2. System.nanoTimeを使用するより正確なアプローチ。3. scheduleAtFixedRateを使用する単純なアプローチ。 一般的にどちらを優先する必要があり、各アプローチの利点と欠点はどこにありますか?事前に情報をありがとうございました。

5
Vector3で演算子 '> ='を使用できないのはなぜですか?
私は私がように参照する2つの位置の間を移動するための四角形を取得しようとしている_positionAとします_positionB。どちらもタイプVector3です。長方形はうまく動きます。ただし、到達_positionBしても、本来のように反対方向に移動することはありません。 コードをもう一度見てみました。オブジェクトが移動ifすると、コード内のステートメントは、rectsの位置がに等しいフレームを逃したという結論に達しました_positionB。rectsの位置がより大きいか等しい 場合は、コードを変更して方向を逆にすることにしました_positionB。私のコードは長すぎないので、以下に表示します。 using UnityEngine; using System.Collections; public class Rectangle : MonoBehaviour { private Vector3 _positionA = new Vector3(-0.97f, -4.28f); //Start position private Vector3 _positionB = new Vector3(11.87f, -4.28f); //End position private Transform _rect_tfm; private bool _atPosA = false, _atPosB = false; public Vector2 speed = new Vector2(1f, 0f); private …
9 unity  c#  vector  mathematics  vector  matrix  unity  c#  transformation  java  3d  terrain-rendering  shading  ios  opengl-es  opengl  rendering  optimization  python  scripting  minecraft-modding  modding  pc  3d-meshes  mesh  culling  point-cloud  networking  interpolation  mathematics  game-design  ai  game-mechanics  animation  unreal-4  skeletal-animation  3dsmax  unity  c#  3d  opengl  c++  textures  unity  ide  cocos2d  cocos2d-x-js  unity  c#  mono  il2cpp  c++  game-loop  timer  linux  flash  actionscript-3  java  glsl  c++  vector  entity-component  c++  directx11  windows  visual-studio  libgdx  mouse  unity  c#  architecture  storage  unity  c#  rotation  coordinates  quaternion  vrpn  movement  vector  unreal-4  unity  shaders  unity  gui  text  bug  shooter  3d  animation  rendering  voxels  c++  mmo  multithreading  linux  textures  procedural-generation  terrain-rendering  multiplayer  mmo  game-state  java  android  libgdx  opengl  procedural-generation  unity  gui  3d  animation  tools  geometry-shader  mobile  advertisements  unity  c#  animation  scripting  unity  animation  unityscript  coroutines  unity  shaders  lighting  camera 

2
再生システム:入力またはイベントを記録しますか?
私はこれを読みました:再生システムを設計する方法しかし、それは私の質問に実際には答えません。 私のゲームは、サーバーの「モデル」および「コントローラー」とは別のプログラムとして、ゲームのクライアントの「ビュー」で構築されています。(mmoのように、またはこの方法で構築されたマルチプレイヤーゲーム)。サーバー側は常にゲームの「真実」であり、クライアントからの入力としてアクション要求を受け入れ、イベントと「現在の状態」メッセージを出力するだけです。 ゲームモデルとルールは固定の「ティック」更新サイクルで完全に決定的であるため、サーバー側では、クライアントビューに送信されたイベントとアクションリクエストの両方を記録できます。どちらも特定のサイクル番号に関連付けられています。 問題は、この場合、再生システムをセットアップするには、入力、またはユーザーアクション要求(そこで提案されている)またはイベントを使用する必要があるかどうかです。 どちらもまったく同じ出力を生成するように思えます。私が見ることができる唯一の違いは: イベントは実際の出力を提供しますが、イベントを発生させるにはアクション要求を処理する必要があります。 アクションリクエストは、記録するデータがはるかに少ない場合があります。 他に考慮すべきことはありますか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.