タグ付けされた質問 「extrapolation」

6
いつ外挿し、いつ補間する必要がありますか?
いつ外挿するか、いつ内挿するかを理解するのに苦労しています。彼はゲームのガファーで、補間するように言ったが、別の記事ではプレーヤーを推定することを推奨した。だから私の質問は、いつ外挿する方が良いのか、いつ補間する方が良いのかということです。

2
オブジェクトの動きを滑らかにするために、実際に補間はどのように機能しますか?
過去8か月間、同じような質問をいくつかしましたが、あまり喜びがなかったので、質問をより一般的なものにします。 OpenGL ES 2.0のAndroidゲームを持っています。その中に私は次のゲームループを持っています: 私のループは固定時間ステップの原理(dt = 1 / ticksPerSecond)で動作します loops=0; while(System.currentTimeMillis() > nextGameTick && loops < maxFrameskip){ updateLogic(dt); nextGameTick+=skipTicks; timeCorrection += (1000d/ticksPerSecond) % 1; nextGameTick+=timeCorrection; timeCorrection %=1; loops++; } render(); 私の統合は次のように機能します: sprite.posX+=sprite.xVel*dt; sprite.posXDrawAt=sprite.posX*width; 今、すべてが私が望むようにかなり機能します。オブジェクトを特定の距離(画面の幅など)で2.5秒で移動するように指定できます。また、ゲームループで許可するフレームスキップのため、ほぼすべてのデバイスでこれを実行でき、常に2.5秒かかります。 問題 ただし、問題は、レンダリングフレームがスキップされると、グラフィックが途切れるということです。それは非常に迷惑です。フレームをスキップする機能を削除すると、すべてが好きなようにスムーズになりますが、異なるデバイスでは異なる速度で実行されます。したがって、それはオプションではありません。 フレームがスキップする理由はまだわかりませんが、これはパフォーマンスの低下とは関係がないことを指摘したいと思います。コードを1つの小さなスプライトに戻し、ロジックはありません(必要なロジックは別として)スプライトを移動します)と私はまだスキップされたフレームを取得します。そして、これはGoogle Nexus 10タブレット上にあります(そして上記のように、デバイス間で速度を一定に保つためにフレームスキップが必要です)。 だから、私が持っている他の唯一のオプションは、内挿(または外挿)を使用することです。そこにあるすべての記事を読みましたが、それがどのように機能するかを理解するのに実際に役立ったものはなく、試行したすべての実装は失敗しました。 1つの方法を使用して物事をスムーズに移動させることができましたが、衝突をめちゃくちゃにしたため、実行できませんでした。レンダリングはレンダリング時にレンダリングメソッドに渡され、その中で処理が行われるため、同様の方法で同じ問題を予測できます。したがって、衝突が位置を修正した場合(キャラクターが壁のすぐ隣に立っている)、レンダラーはその位置を変更して壁に描画できます。 だから私は本当に混乱しています。レンダリングメソッド内からオブジェクトの位置を変更するべきではないと人々は言っていますが、オンラインのすべての例でこれが示されています。 私は正しい方向へのプッシュを求めています。これらを何度も読んだので、人気のゲームループの記事(deWitters、Fix your timestepなど)にリンクしないでください。私はしていない私のためのコードを記述するために誰を尋ねます。補間が実際にいくつかの例でどのように機能するかを簡単な言葉で説明してください。次に、アイデアをコードに統合し、必要に応じてより具体的な質問をします。(これは多くの人が悩んでいる問題だと思います)。 編集する いくつかの追加情報-ゲームループで使用される変数。 private long nextGameTick …

2
外挿は衝突検出を中断します
スプライトの動きに外挿を適用する前は、衝突は完全に機能していました。ただし、(物事を滑らかにするために)スプライトの動きに外挿を適用すると、衝突が機能しなくなります。 これが、外挿前の動作です。 しかし、外挿を実装した後、衝突ルーチンが壊れます。これは、(レンダーコールにある)外挿ルーチンによって生成された新しい座標に作用しているためと考えています。 外挿を適用した後 この動作を修正するには? 外挿の直後に追加の衝突チェックを試みました-これは多くの問題を解決するようですが、レンダリングにロジックを入れることは問題外なので、これを除外しました。 私はまた、spritesXの位置のコピーを作成し、それを外挿して、オリジナルではなくそれを使用して描画してみたので、元のロジックをそのままにして、ロジックがピックアップできるようにしました。壁にぶつかったとき。これもこれに対処する正しい方法ではないと確信しています。 ここで似たような質問をいくつか見つけましたが、答えは役に立ちませんでした。 これは私の外挿コードです: public void onDrawFrame(GL10 gl) { //Set/Re-set loop back to 0 to start counting again loops=0; while(System.currentTimeMillis() > nextGameTick && loops < maxFrameskip){ SceneManager.getInstance().getCurrentScene().updateLogic(); nextGameTick+=skipTicks; timeCorrection += (1000d/ticksPerSecond) % 1; nextGameTick+=timeCorrection; timeCorrection %=1; loops++; tics++; } extrapolation = (float)(System.currentTimeMillis() + skipTicks - …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.