拡大/縮小,回転,透過 機能の追加

初期のライブラリの、拡大/縮小,回転,透過に関する部分的なコードを紹介しています。
(細部で最新版と異なる部分があります。)

Spriteクラスへの追加

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;	//可視状態

SpriteBasicクラスの変更

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クラスのドキュメントを確認ください。