- アニメーション
- アニメーション
- グラフィックスで表示した文字や図形、画像などを一定の時間間隔で再描画して、あたかも動いているように見せかける手法
- Javaでのアニメーション
- Javaでのアニメーションの実装には、以下の方法がある
- タイマーを使った実装
- System.currentTimeMills()
- TimerTask()など
- スレッドを使った実装
- Thread.sleep()
※スレッドを使う時はThread.sleep()を呼び出すメソッドやそのメソッドを呼び出すメソッドにthrows宣言(throws InterruptedException)を追加するか、try-catchで例外処理を追加する必要がある
- はじめてのアニメーション
- グラフィックスの描画部分を座標を変えて一定の間隔で再描画する
- Thread.sleep(100)で0.1秒(100ミリ秒)プログラムの実行を休止する
- 赤い四角を1秒ごとに10ピクセル分画面左から右に動かす
int x=100;
while(true) {
g.fillRect(x, 100, 50, 50);
x+=10;
Thread.sleep(100);
}
実行結果
GIF画像
- はじめてのアニメーション Ver 2.0
- 赤い四角が左から右に動いているが、前の四角が残っているので、帯状に伸びてしまっている
- そこで描画部分を以下のようにして、画面全体をクリア(clearRect())すると動いているようにみえる
int x=100;
while(true) {
g.clearRect(0, 0, 320, 240);
g.fillRect(x, 100, 50, 50);
x+=10;
Thread.sleep(100);
}
実行結果
GIF画像
コード全体
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;
public class Main{
public Main(){
JFrame f=new JFrame();
f.setTitle("Graphics Test");
f.setSize(320,240);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
//フレームに描画する準備
Graphics g=f.getGraphics();
//色を赤に設定
g.setColor(Color.red);
//四角を描画(塗りつぶし)
int x=100;
while(true) {
g.clearRect(0, 0, 320, 240);
g.fillRect(x, 100, 50, 50);
x+=10;
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args){
new Main();
}
}