イメージマップの利用
では、このサンプルを「イメージマップ」という機能を使って作成してみましょう。今回は、非常にシンプルになりますよ。
class MainCanvas extends Canvas {
private int[] data;
ImageMap map;
MainCanvas() {
setSoftLabel(SOFT_KEY_1, "END");
setBackground(Graphics.getColorOfName(Graphics.WHITE));
data = new int[]{
2,2,2,2,3,0,0,
2,2,3,3,3,3,3,
2,2,3,0,0,0,1,
2,0,3,0,0,1,1,
0,0,3,0,1,1,1,
0,0,3,0,1,1,1,
0,0,3,0,0,1,1
};
try {
MediaImage mi =MediaManager.getImage("resource:///images.jpg");
mi.use();
Image img = mi.getImage();
Image[] arr = new Image[]{img};
map = new ImageMap(25,25,7,7,data,arr,true);
}catch(Exception e){}
}
public void paint(Graphics g) {
g.lock();
g.clearRect(0, 0, Display.getWidth(), Display.getHeight());
g.drawImageMap(map,10,10);
g.unlock(true);
}
public void processEvent(int type, int param) {
switch(type){
case Display.KEY_RELEASED_EVENT:
switch(param){
case Display.KEY_SOFT1:
(IApplication.getCurrentApp()).terminate();
break;
}
break;
}
}
}
今回は、修正した「MainCanvas」クラスのソースコードだけ抜粋して掲載しておきました。これでも、プログラムを実行すれば、先ほどのiアプリと全く同じ表示が現れます。
ここでは、「ImageMap」というクラスを作成しています。この部分ですね。
map = new ImageMap(25,25,7,7,data,arr,true);
このImageMapは、ずいぶんとたくさんの引数が指定されています。これらを整理すると、こんな感じになります。
new ImageMap(マップの横幅,縦幅,横の個数,縦の個数,int配列,Image配列,boolean);
ImageMapでは、表示するマップ1個の大きさ、縦横に並べる個数、表示する番号をまとめたint配列、表示用のImage配列などを引数に指定します。最後にbooleanが1つありますが、これは「イメージが1つ1つ別のImageとして用意されいるか、それとも1つのImageにまとめられているか」を示します。
これらの引数を指定すれば、後は、ただImageMapの場所を指定するだけです。paintで描画している部分を見てください。
g.drawImageMap(map,10,10);
たったこれだけ。ImageMapインスタンスを作るに引数を細かく指定する面倒はありますが、描画の簡単さを考えると、2次元マップ表示にこれを利用しない手はありませんね!