2016-05-13 18 views
0

私はスクリーン上で正方形を翻訳するなど、Javaでアニメーションをどのくらい正確に作成しているのかよく分かりません。 forループを使用して矩形の位置を変更しようとすると、すべてが即座に実行され、矩形の終点座標になります。だから私が知りたいのは、人々がこれらのスムーズなアニメーションをどのようにして達成するのか、何らかの理由でカスタムアニメーションクラスを作成したいのであれば、Javaのインスタントポジションの変更ではなく、アニメーションはJavaでどのように正確に機能しますか?

+0

:ランニング 'rectangle.x =(System.currentTimeInMillis() - startTimeInMillis)のようなもの* 0.5 + 10;'ごと数ミリ秒。あるいは単に数ミリ秒ごとに 'rectangle.x + = 2;'を実行するだけです。 – immibis

+0

ねえ、ありがとう。スレッドをスリープさせたり、他のイベントの実行を侵害したりせずに、毎ミリ秒ごとにrectangle.xを実行する方法はありますか? – AnotherRandomUser

+0

あなたは同時性を理解する必要があります。本質的には、バックグラウンドで目立つスレッド/タイマーがあります。オブザーバーは、要件に基づいて状態を更新し、画面にレンダリングされるオブザーバに通知を送ります(独立したスレッド、しばしばイベントディスパッチスレッド)。あなたが最終的にこれを達成する方法は、使用しているフレームワークに依存します – MadProgrammer

答えて

0

矩形のxとyの位置を保存するだけです。その後、一定の時間が経過したかどうかを確認するwhileループを実行します。存在する場合は、位置変数をインクリメントします。

コード(ニーズに合わせて微調整が必​​要になります):一言で言えば

int tick = 500; //set this to whatever you want 
long lastTime = System.currentTimeInMillis(); 
while(true) { 
long currTime = System.currentTimeInMillis(); 
if (currTime > lastTime + tick) { 
    lastTime = currTime; 
    x = x + 1; //replace this with your object's position 
} 
} 
+0

簡単な質問ですこのことは、別のスレッドで正しく実行されますか?もし私が10種類のアニメーションをやりたいのであれば、それを動作させるには10本の糸が必要ですが、私のコンピュータには8本しかない時はどうすればいいですか?私はただテストしたい。 – AnotherRandomUser

+0

最初に、8つのコアを持つマシンに10個のスレッドを作成できます。コンピュータはそれを抽象化し、同じコア上のスレッドを並行して実行します。次に、別のスレッドでこれを実行する必要はありませんが、それは良い考えです。 – nhouser9

+0

フレームワークによっては、 "ティッカー"と "レンダラー"間の競合状態を危険にさらす可能性があります(または、「イベント」スレッドで実行している場合、UIとのさらなる対話を防ぎます)。 – MadProgrammer

-1

Thread.sleep(long millis)メソッドを使用して遅延を追加すると、指定したミリ秒単位で現在のスレッドの実行を停止できます。しかし、おそらくより良い方法があります。

+0

お返事ありがとうございますが、私はthread.sleepが最善の選択だとは思わないので、あなたはメニューを作成していると言いますか?アニメーションのためにスレッドをスリープ状態にするように指示したが、スリープ状態になるとユーザーのクリックにどのように反応するのでしょうか? – AnotherRandomUser

+0

私はそれが眠っている間にユーザーのクリックを登録することができるとは思わない。 – Pyrrhic

+0

私はそう思います。私はこれがどのように行われるのかについてGoogle検索を試みてきましたが、今まで何も見つけていないので、ここに来て質問する前に1時間以上探しています。 – AnotherRandomUser

関連する問題