1
2
3
4
5
6
7
8
9 package tsukuba_bunko.peko.canvas.stage;
10
11 import java.awt.Dimension;
12 import java.awt.Image;
13
14 import java.awt.image.BufferedImage;
15
16
17 /***
18 * エフェクトを実行するクラスの基本クラスです。
19 * @author $Author: ppoi $
20 * @version $Revision: 1.1 $
21 */
22 public abstract class Effect {
23
24 /***
25 * キャンバス
26 */
27 private StageCanvas _canvas = null;
28
29 /***
30 * サイズキャッシュ
31 */
32 private Dimension _size = new Dimension();
33
34
35 /***
36 * <code>Effect</code> のインスタンスを作成するためにサブクラスのコンストラクタから呼ばれます。
37 */
38 protected Effect()
39 {
40 super();
41 }
42
43
44 /***
45 * 初期化します。
46 */
47 public void initialize()
48 {
49 _canvas = null;
50 }
51
52 /***
53 * オフスクリーンバッファを描画するステージキャンバスを取得します。
54 * @return ステージキャンバス
55 */
56 protected StageCanvas getStageCanvas()
57 {
58 return _canvas;
59 }
60
61 /***
62 * ステージキャンバスのサイズを取得します。
63 * @return サイズを格納した Dimension インスタンス
64 */
65 protected Dimension getCanvasSize()
66 {
67 return _canvas.getSize( _size );
68 }
69
70 /***
71 * <code>screen</code> をキャンバスに描画します。
72 */
73 protected void drawImage( Image screen )
74 {
75
76 _canvas.repaint();
77 }
78
79 /***
80 * 実行手順のテンプレートメソッドです。
81 * @param canvas オフスクリーンバッファを描画するキャンバス
82 * @param screen オフスクリーンバッファ
83 * @param next コピー元画像
84 */
85 public final void process( StageCanvas canvas, BufferedImage screen, BufferedImage next )
86 {
87 _canvas = canvas;
88 perform( screen, next );
89 initialize();
90 }
91
92 /***
93 * この <code>Effect</code> の名前を取得します。
94 * @return エフェクト名
95 */
96 public abstract String getName();
97
98 /***
99 * <code>next</code> の内容をエフェクトをかけながら <code>screen</code> にコピーします。
100 * @param screen オフスクリーンバッファ
101 * @param next コピー元画像
102 */
103 protected abstract void perform( BufferedImage screen, BufferedImage next );
104 }