アスピライト > 後指定優先適用



Back Next
更新日 2008.08.29
後指定優先適用


Graphics2D	g2d;

// 文字を中央に表示(拡大・回転)
public void drawStringCenterScale(String str, int x, int y, double sx, double sy, double angle) {
	AffineTransform	save_at = g2d.getTransform();	// 現在のTransformを待避
	AffineTransform	at = new AffineTransform();	// 新しいAffineTransformを作成

	FontMetrics	fm = g2d.getFontMetrics();

	// 後指定優先適用
	at.translate(x, y);		// 平行移動
	at.rotate(angle, 0, 0);		// 回転
	at.scale(sx, sy);		// 拡大
	at.translate(- fm.stringWidth(str) / 2, fm.getAscent() - fm.getHeight() / 2);// 平行移動(原点へ)
	g2d.transform(at);						// Transformをセット

	g2d.drawString(str, 0, 0);

	g2d.setTransform(save_at);					// 元のTransformを復帰
}

後に指定したメソッドから変換されます。

原点へ平行移動 → 拡大 → 回転 → 平行移動


DirectX では、原点へ平行移動 * 拡大 * 回転 * 平行移動
と順番に掛け合わせていけば良かったので、戸惑ってしまいました。

Back Next

アスピライト > 後指定優先適用