3

基本的に私は物理学を使ったゲームでドラッグを試しています. 横方向の動きを減らす必要があります (マイナスにするだけでなく、0 に近づけるなど)。

(アイテムが右に動く場合は正の力、左に動く場合は負の力)

今、私はこれをやっています:

if (objects[i]->force.x > 0)
    objects[i]->force.x -= drag;
else
    objects[i]->force.x += drag;

これは問題なく機能しますが、これを行うためのより洗練された方法が必ずあると感じています。

また、0 を超えないようにする方法を見つけるのも悪くありません。

4

4 に答える 4

1

モデルに満足している場合 (コメントの注意事項に注意してください)、signum関数を使用して式を短縮できます。C++ では、1 つを選択するのは明らかにやや複雑ですが... .

どちらを選択しても、ここでは と呼びますsgn()。次に、適用されたドラッグの符号を の反対の符号にする必要がありforce.xます。

objects[i]->force.x += -1 * sgn(objects[i]->force.x) * drag;

(ここで単項マイナスを使用できることはわかっています。これにより、意図がより明確になると思います)

于 2013-05-10T14:54:12.903 に答える