3

わかりました、この質問は少し抽象的になります。

ベクトルに格納された一連の座標で表される線に沿って移動するアイコンがあり、それらを繰り返し処理しています。座標間の距離は可変です。そのため、アイコンがゆっくりとスムーズに移動する場合もあれば、一度に数 100 ピクセルずつジャンプする場合もあります。

移動する必要がある座標の各セットを、数がサイズに基づく相対座標のセットに分割するアルゴリズムを考え出すのに苦労しています。これにより、単一の座標にいくつの座標があっても移行がスムーズになりますライン。

どんなアイデアでも大歓迎です。ありがとう :)

4

3 に答える 3

2

メイン ゲーム ループに関するこのディスカッションをご覧ください。

そして、そのページからの引用は次のとおりです。

このステップでは、ゲーム ワールド内のすべてのオブジェクトの更新が計算され、実行されます。通常、最後の更新から経過した時間を示す時間ステップ値がすべての更新メソッドに渡されます...

次の 3 つのことを知っておく必要があります。

  • オブジェクトの位置を最後に更新してからどのくらいの時間が経過しましたか?
  • オブジェクトの移動速度は?
  • オブジェクトが移動している方向 (通常はレイとして表される) は?

これらから、オブジェクトの現在の位置を計算できます。

于 2010-02-15T22:14:06.293 に答える
1

オブジェクトを一定の速度で移動させたい場合は、オブジェクトが実際に速度 (ピクセル/秒) で移動する時間ベースのモデルをお勧めします。曲線 ( catmull-rom曲線など) に沿ってスプラインを作成すると、すべてのポイント (っぽい) にヒットさせることができます。

于 2010-02-15T22:00:12.360 に答える
0

それで、最初の点 (x0/y0) から終点 (x1/y1) まで線に沿って変数のステップ数で移動したいのですが、各ステップの最大距離は?

これは、次のような方法で実行できます。

int stepdist = 10; // max pixels per step
double xdiff = x1 - x0;
double ydiff = y1 - y0;
double dist = sqrt( xdiff * xdiff + ydiff * ydiff );
int steps = (int) ( ( dist - 1 ) / stepdist );
if( steps > 0 )
{
   xdiff /= steps;
   ydiff /= steps;
   while( --steps >= 0 )
   {
       x0 += xdiff;
       y0 += ydiff;
       moveTo( (int) x0, (int) y0 );
   }
}
moveTo( (int) x1, (int) y1 );
于 2010-02-15T23:05:41.923 に答える