[]第26回 画像の回転
第26回では、画像の回転とアニメーションについてです。
画面への描画はpaint()の内部で行うのが一般的です。
今回はもうひとつの方法として、paint()の外で描画する方法についても紹介しておきましょう。
void paint(Graphics g) { } が paint の一般的な形です。この引数の g を使って、
g.drawImage ( ) 等を呼び出します。 paint の外で描画を行う場合にも、g が必要です。
Canvasの中であれば getGraphics();という命令を呼び出すと良いです。
Graphics g = getGraphics();
とすれば必要なgを取得できます。
では、本題の回転とアニメーションです。
簡単な方向の回転であれば、drawImage()を呼び出す前に準備すると回転した状態で描画されます。
g.setFlipMode(Graphics.FLIP_ROTATE_LEFT); //左90度
g.setFlipMode(Graphics.FLIP_ROTATE_RIGHT); //右90度
g.setFlipMode(Graphics.FLIP_ROTATE); // 180度
g.setFlipMode(Graphics.FLIP_NONE); // 回転無し
これを連続的に行うと、回転するアニメーション風になります。
KEY_RELEASED_EVENTの処理の中に以下のプログラムを追加します。動作させて決定キーを押すと、ボールが回転したようにみえます。画像の準備は以前に紹介したものを流用します。
if(param==Display.KEY_SELECT) {
Graphics g = getGraphics();
try {
for(int i=0;i<5;i++) {
g.setFlipMode(Graphics.FLIP_ROTATE_LEFT);
g.drawScaledImage(pic, 80,20, 30,30, 0,0,15,15);
Thread.sleep(100);
g.setFlipMode(Graphics.FLIP_ROTATE);
g.drawScaledImage(pic, 80,20, 30,30, 0,0,15,15);
Thread.sleep(100);
g.setFlipMode(Graphics.FLIP_ROTATE_RIGHT);
g.drawScaledImage(pic, 80,20, 30,30, 0,0,15,15);
Thread.sleep(100);
g.setFlipMode(Graphics.FLIP_NONE);
g.drawScaledImage(pic, 80,20, 30,30, 0,0,15,15);
Thread.sleep(100);
}
} catch(Exception e) { }
}
少し補足すると、 Thread.sleep(100); が早く回転しすぎないようにするための待ち処理です。100ms のウェイトをかけます。この命令を使う場合は、try { } catch { }で囲まなければなりません。(この例はあまり正しい囲み方ではないですが)