イメージの利用とイベント処理 (6/6)
作成:2009-12-30 10:00
更新:2009-12-30 10:00
更新:2009-12-30 10:00
■ImageMapでマップを表示しよう
では、これも実際に簡単なサンプルを作ってみましょう。今回は、「image.jpg」「image2.jpg」「mage3.jpg」という3つのイメージを用意します。サイズは、それぞれ32×32ドットにそろえます。そしてこれらを「res」フォルダにまとめ、MainCanvasクラスを以下のように修正しましょう。
先ほどのサンプルと同様に、上下左右のキーで赤い枠を動かし、選択キーを押すと、表示されるイメージがimage.jpg、image2.jpg、image3.jpg……と切り替わっていきます。ここでは、イメージを読み込んでImageMapを作成するのに、以下のようにしています。
data = new int[MAX_X * MAX_Y];
images = new Image[3];
try {
MediaImage mi = MediaManager.getImage("resource:///image.gif");
mi.use();
images[0] = mi.getImage();
MediaImage mi1 = MediaManager.getImage("resource:///image2.gif");
mi1.use();
images[1] = mi1.getImage();
MediaImage mi2 = MediaManager.getImage("resource:///image3.gif");
mi2.use();
images[2] = mi2.getImage();
map = new ImageMap(IMG_W,IMG_H,MAX_X,MAX_Y,data,images);
} catch (ConnectionException e) {}
3つのImageを読み込んだ後、それをImage配列のそれぞれの場所に保管します。そして、new ImageMapで、int配列とImage配列をそれぞれ引数に指定してインスタンスを作成します。ちょっと下準備が面倒くさいですが、ImageMapさえできれば、後はマップの描画は、実にこれだけです。
g.drawImageMap(map, 0, 0);
第1引数にImageMap、第2,3引数に描画する位置の値を指定すれば、その場所にばっ!とマップが描かれます。実に簡単。ImageMapは、使いこなせるようになればずいぶんとさまざまな応用が可能ですね!
先ほどのサンプルと同様に、上下左右のキーで赤い枠を動かし、選択キーを押すと、表示されるイメージがimage.jpg、image2.jpg、image3.jpg……と切り替わっていきます。ここでは、イメージを読み込んでImageMapを作成するのに、以下のようにしています。
data = new int[MAX_X * MAX_Y];
images = new Image[3];
try {
MediaImage mi = MediaManager.getImage("resource:///image.gif");
mi.use();
images[0] = mi.getImage();
MediaImage mi1 = MediaManager.getImage("resource:///image2.gif");
mi1.use();
images[1] = mi1.getImage();
MediaImage mi2 = MediaManager.getImage("resource:///image3.gif");
mi2.use();
images[2] = mi2.getImage();
map = new ImageMap(IMG_W,IMG_H,MAX_X,MAX_Y,data,images);
} catch (ConnectionException e) {}
3つのImageを読み込んだ後、それをImage配列のそれぞれの場所に保管します。そして、new ImageMapで、int配列とImage配列をそれぞれ引数に指定してインスタンスを作成します。ちょっと下準備が面倒くさいですが、ImageMapさえできれば、後はマップの描画は、実にこれだけです。
g.drawImageMap(map, 0, 0);
第1引数にImageMap、第2,3引数に描画する位置の値を指定すれば、その場所にばっ!とマップが描かれます。実に簡単。ImageMapは、使いこなせるようになればずいぶんとさまざまな応用が可能ですね!
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
※MainCanvasの修正 class MainCanvas extends Canvas { private Image[] images; private static final int MAX_X = 5,MAX_Y = 5; private static final int IMG_W = 32,IMG_H = 32; private int x, y; private int[] data; private ImageMap map; MainCanvas() { this.setSoftLabel(Frame.SOFT_KEY_2, "EXIT"); data = new int[MAX_X * MAX_Y]; images = new Image[3]; try { MediaImage mi = MediaManager.getImage("resource:///image.gif"); mi.use(); images[0] = mi.getImage(); MediaImage mi1 = MediaManager.getImage("resource:///image2.gif"); mi1.use(); images[1] = mi1.getImage(); MediaImage mi2 = MediaManager.getImage("resource:///image3.gif"); mi2.use(); images[2] = mi2.getImage(); map = new ImageMap(IMG_W,IMG_H,MAX_X,MAX_Y,data,images); } catch (ConnectionException e) {} } public void paint(Graphics g) { g.lock(); g.clearRect(0, 0, this.getWidth(), this.getHeight()); g.drawImageMap(map, 0, 0); g.setColor(Graphics.getColorOfName(Graphics.RED)); g.drawRect(IMG_W * x, IMG_H * y, IMG_W, IMG_H); g.unlock(true); } public void processEvent(int type, int param) { super.processEvent(type, param); switch (type) { case Display.KEY_PRESSED_EVENT: switch (param) { case Display.KEY_UP: y -= y == 0 ? 0 : 1; break; case Display.KEY_DOWN: y += y == MAX_Y - 1 ? 0 : 1; break; case Display.KEY_LEFT: x -= x == 0 ? 0 : 1; break; case Display.KEY_RIGHT: x += x == MAX_X - 1 ? 0 : 1; break; case Display.KEY_SELECT: data[x + y * MAX_X] = (data[x + y * MAX_X] + 1) % images.length; break; case Display.KEY_SOFT2: IApplication.getCurrentApp().terminate(); break; } repaint(); } } }
※関連コンテンツ