2

オブジェクトを移動する必要があります。私の場合は、特定のパス上の文字列です。実際には、パスは半円になる可能性があります。添付の図に示すように、文字列は別のオブジェクトの背後に表示され、パスに沿って移動し、2 番目のオブジェクト (両方の画像) の背後に消えます。始め方がわかりません...誰かが私を助けてくれることを願っています。前もって感謝します。

ここに画像の説明を入力

4

1 に答える 1

3

Threadテキスト移動のロジックを処理する新しいを作成します。そのrun()メソッドでは、反復ごとにテキストの位置を変更するループを追加します。また、テキストの位置を変更した後、または上書きrepaint()したコンポーネントを定義するコンポーネントを呼び出す必要があります。paint()paintComponent()

各反復の後、スレッドは短時間スリープする必要があります。50ミリ秒間スリープすると、1秒あたり約20フレームが取得されます。

さて、数学です。ある点が円の中心(2つの画像の中間点より下のどこか)であり、テキストの開始点であることがわかっているとします。これにより、2点間の距離として円の半径を計算できます。

d = Math.sqrt((c.x - p.x) * (c.x - p.x) + (c.y - p.y) * (c.y - p.y))

テキストを円上で動かし続けるには、上記の距離を一定にする必要があります。したがって、実行できることは、xを定数値でインクリメントし、テキストの新しいyを計算することです。

d = Math.sqrt((c.x - p.x) * (c.x - p.x) + (c.y - p.y) * (c.y - p.y))

上記の式では、値がわかりますd, c.x, c.y, p.x(計算してインクリメントしたばかりです)。必要なのはpyの値だけです。これは次のとおりです。

p.y = c.y - Math.sqrt(d * d - ((c.x - p.x) * (c.x - p.x))
于 2012-08-28T08:26:44.020 に答える