初期のライブラリの、拡大/縮小,回転,透過に関する部分的なコードを紹介しています。
(細部で最新版と異なる部分があります。)
Spriteクラスに 可視、横と縦の拡大縮小率、角度、中心座標、不透明度用として、 次のインスタンス変数を追加変更しました。
public double scaleX = 1;//横 拡大縮小率 public double scaleY = 1;//縦 拡縮小率 public double angle = 0;//角度 単位:degree public double cx = 0; //中心座標 public double cy = 0; public float alpha = 1.0F; //不透明度(0から1.0) public boolean visibled = true; //可視状態
getImageメソッドを次のように変更します。
//イメージを取得 (subSpriteがある場合は再帰的に行う) public Image getImage() throws Exception{ if (this.image instanceof BufferedImage == false){ return this.image;//編集してはいけないイメージ } Graphics2D g2 = (Graphics2D)this.image.getGraphics(); for (int i = 0; i < subSprite.size(); i++){ Sprite sprite = subSprite.get(i); if (sprite.visibled == false) continue; Image img = sprite.getImage(); AlphaComposite omposite = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, sprite.alpha); g2.setComposite( omposite );//合成情報を設定 sprite.setDrawParameter();// (位置、スケール、回転)の設定 g2.drawImage(img, sprite.trans, null); } return this.image; }
Sprite.javaのsetDrawParameterメソッドを次のように変更しています。
//内部情報を、直接描画で使う各種パラメタに変換
public void setDrawParameter(){
AffineTransform scale = AffineTransform.getScaleInstance(scaleX, scaleY);
AffineTransform rotate = AffineTransform.getRotateInstance(Math.toRadians(angle), cx * 1, cy * 1);
this.trans = AffineTransform.getTranslateInstance(this.x, this.y);//移動パラメタ生成
this.trans.concatenate(scale);// 移動に回転を組み合わせる
this.trans.concatenate(rotate);// 移動に回転を組み合わせる
}
こはで、SpriteBasic.java のgetImage() メソッド内のdrawImageで使うthis.transの描画座標情報を変更しています。
詳細は、AffineTransformクラスのドキュメントを確認ください。