RPG01

MAGI JAVA -Make a game in Java-
JAVA Game作成講座2 03回
マップエディター作成3


RPGkouza2-03 zipファイル



[起動方法]
1. Java Runtime Environmentをインストールする。 http://java.com/ja/download/
2.ファイルを適当な場所で解凍する。
3.コマンドプロンプトのアイコンが入っているので起動。
4.j 一文字だけ入力して「Enter」。
これでゲームが始まるはずです。

[マップのスクロール+マップ上でクリックするとチップを配置する]
チップ取得してそれを配置、というのを次回やるのだがその前にチップを置くテスト。
00のチップ上でクリック/ドラッグすると01のチップに置き換えていく。

画面端の数字は現在表示位置のチップ番号。
右端の数字の上半分を押すと上にスクロール、下半分で下にスクロール。
同様にした側の数字も左右スクロールに対応している。
ウィンドウズなどの移動バーとやや使い方が異なる。

意味深な画面右上の黒いスペースにチップ取得用の絵を次回配置する。
ここでチップを選択し、左のマップに置く。
それを繰り返してマップを作っていくわけだ。
最終的に右下の部分にセーブ、ロードボタンを作る。

いきなりドカドカ追加すると理解しづらいと思うので、
出来る限り段階を踏んで書庫にまとめていく。
今回の追加部分を書き出していく。

[MapEditor クラス]
public void eventStart(GameData gdt) {

case 1://総合メニュー
if (pushKey==1) {

}
if (pushKey==2) {
mEditEnd=true;
}

if (clickC==1) {
//マップチップ配置フィールドでボタンを押したケース
if (buttonCheck(0,0,544,544)) {
//本来はチップ取得してから任意のチップを入力できるのだが、今回はテスト用に強制的に01を打ち込む。
int nmx=mouseX/32;
int nmy=mouseY/32;
maptipNumber[nmx+nowmx][nmy+nowmy]="01";
}
if (buttonCheck(576,0,32,288)) nowmy--;
if (buttonCheck(576,288,32,288)) nowmy++;;
if (nowmy<=0) nowmy=0;
if (nowmy>=82) nowmy=82;
if (buttonCheck(0,576,288,32)) nowmx--;
if (buttonCheck(288,576,288,32)) nowmx++;;
if (nowmx<=0) nowmx=0;
if (nowmx>=82) nowmx=82;

if (buttonCheck(600,500,60,30) ) mEditEnd=true;
}
break;
}


}

クリックして動作するイベントを色々追加した。
if (buttonCheck(0,0,544,544)) {
の部分はマップチップ配置画面。
現在のマウス座標に応じてそこのチップを置き換えていく。
本来置き換え用のチップ番号は別枠で取得してくるのだが、
今回は固定番号で動作テストだけ先にやってしまう。
次の章でその設定をできるようにする。

if (buttonCheck(576,0,32,288)) nowmy--;
if (buttonCheck(576,288,32,288)) nowmy++;;
この二つは右端の数字をクリックしたときのリアクション。
上半分の数字は上スクロール。下半分は下にスクロール。

同様に最下段の数値をクリックすると左右にスクロールする。
if (buttonCheck(0,576,288,32)) nowmx--;
if (buttonCheck(288,576,288,32)) nowmx++;;
100までしかチップをおけないように初期設定しているので、0-99の範囲にとどめる。
82+17マスで99。オーバーするとエラーになる。
マップサイズもあとで任意にセットできるようにする。

次はPaint関数の変更点を見ていく。かなり大きく追加した。

public void maptipPaint(Graphics g) {

for (int y=0;y<=17;y++) {
for (int x=0;x<=17;x++) {
//左上から順にチップの位置を探し、適合した座標を抜き取る。
String tString=maptipNumber[nowmx+x][nowmy+y];
int[] txy=gSet.maptipSearch(tString);
int dx=txy[0]*32;
int dy=txy[1]*32;
//カメラによる修正値を加える
int zx=x*32-gData.cameraPos[0];
int zy=y*32-gData.cameraPos[1];

g.drawImage(gData.maptipGra,zx,zy,zx+32,zy+32,dx,dy,dx+32,dy+32,this);
}
}


}

maptipSearchをGraphicSetクラスに割り振った。
ARPanel内の物もgSetに移行。同じ処理を二か所に書くのは効率悪いので使いまわす。
カメラ云々は消すの忘れた…あっても動くのでそのまま使っているが、
ここでは一切カメラをいじっていない。

maptipPaint処理はARPanelでも使っているが、ここでの処理と色々違う。
下に比較用にコピペしておいたが、マップ表示する始点と終点が異なる。
エディタではスクロールした分だけずらす。
マップ移動モードではカメラ座標の分ずらす。
エディタは18チップ*18チップの範囲しか表示しないようにしている。

[ARPanel内のmaptipPaint]
public void maptipPaint(Graphics g) {

int mwidth=gData.mapSize[0];
int mheight=gData.mapSize[1];
for (int y=0;y<=mheight;y++) {
for (int x=0;x<=mwidth;x++) {
//左上から順にチップの位置を探し、適合した座標を抜き取る。
String tString=gData.maptipNumber[x][y];
int[] txy=gSet.maptipSearch(tString);
int dx=txy[0]*32;
int dy=txy[1]*32;
//カメラによる修正値を加える
int zx=x*32-gData.cameraPos[0];
int zy=y*32-gData.cameraPos[1];

g.drawImage(gData.maptipGra,zx,zy,zx+32,zy+32,dx,dy,dx+32,dy+32,this);
}
}


}

maptipSearchはGraphicSet内にそのまま移行しただけなので詳細を省く。
この二か所以外に使わないと思うが、無事に使えているものを再利用するのはミス防止に役立つので重要。

今回はここまで。次回はチップを取得して配置するテストを行う。
そこまで一気に作ってしまおうかと思ったが、なるべく丁寧に進めていくことにした。
将来自分が作り方を忘れたときも役に立つので細かく分ける事は無駄ではない。



・トップページへ戻る
inserted by FC2 system