ひっきぃのメモ帳

趣味で作るプラモデル製作の過程と作品、日々の資格取得へ向けての活動、Apple中心のIT関連ネタを書いています。

[]第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); // 回転無し

これを連続的に行うと、回転するアニメーション風になります。

ball


 

 

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 { }で囲まなければなりません。(この例はあまり正しい囲み方ではないですが)