-1

Pythonを使用してデバイスコンテキストで画像を描画しましたが、垂直または水平にスムーズに移動/アニメーション化したいと考えています。

どのアルゴリズムを使用すればよいですか? Python でこの種のタスクに関する情報はどこで入手できますか?

4

2 に答える 2

1

オブジェクトがデバイス コンテキストで描画されると、そこにとどまります。移動したい場合は、再描画する必要があります。

固定された背景を保持し、移動するたびに可動要素のみを再描画できます。基本的にはそのようにしています。

オブジェクトをライン上でスムーズに移動するには、次のようなことを行う必要があります (プログラムの準備ができていないため、アイデアを提供することしかできません)。

  • 開始位置と終了位置を選択します: ポイント A(x1, y1) と B(x2, y2)
  • オブジェクトが A から B に位置を変更する時間 (たとえば 10 秒) を選択します。
  • 特定の間隔(たとえば2秒)に設定されたタイマーを使用します
  • オブジェクトが各タイマー間隔で変更するデルタ X と Y を計算します。この場合、dx = (x2-x1)*2/10 および dy = (y2-y1)*2/10
  • タイマー コールバックで、現在のオブジェクトの位置を dx と dy でインクリメントし、画像を再描画します。

それがアルゴリズムになります。

PyGameもご覧になることをお勧めします。多分あなたはそれを使うことができ、それにはいくつかのチュートリアルもあります.

于 2008-09-24T12:15:05.607 に答える
0

(x1, y1)オブジェクトを開始座標と目的座標の間でスムーズに移動するには、まず、オブジェクトが目的地に到達するまでにかかる(x2,y2)時間を自問する必要があります。オブジェクトを時間単位 (秒、時間など) でそこに到達させたいとしましょう。これを決定したら、単位時間あたりの変位をワークアウトするのは簡単です。t

dx = (x2-x1)/t
dy = (y2-y1)/t

これで、単位時間ごと(dx,dy)にオブジェクトの位置 ( (x,y)、initially )を追加し、オブジェクトが目的地からしきい値距離内に入ったときに停止するだけで済みます。(x1,y1)これは、除算のエラーが累積するという事実を説明するためのものです。したがって、次のような等価チェックを行った場合:

(x,y)==(x2,y2)

それが真実になることはまずありません。

上記の方法では、一定速度の直線運動が得られることに注意してください。代わりに、もう少し複雑な数式を使用して、オブジェクトが加速し、巡航速度を維持し、その後減速するように見せることができます。次に、次の式が役立つ場合があります。

v(t) = u(t) + t*a(t)
x(t) = v(t) + t*v(t)

これは単なるオイラー法であり、アニメーションの目的には十分なはずです。

于 2008-09-24T13:45:34.813 に答える