RPG01

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


RPGkouza2-04 zipファイル



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

[チップを取得しマップに配置できるようにした]
取得フィールドの右下に選択中のチップを表示した。
操作性最悪なのでもうちょいいいやり方を考える…。
無機質な数字を打ち込むよりはずっとマシだが、
もうちょい取得フィールドが広くないと不便すぎる。

チップ取得画面もスクロールすることで収まりきらない部分を表示できる。
横方向が狭いので見づらい。

今回の追加部分を書いておく。
[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]=nowChip; }
//マップのスクロール 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(608,0,160,320)) {
//本来はチップ取得してから任意のチップを入力できるのだが、今回はテスト用に強制的に01を打ち込む。
int nmx=(mouseX-608)/32+nowcx;
int nmy=mouseY/32+nowcy;
nowChip=pick_maptipNumber[nmx+nowmx][nmy+nowmy];
}
//チップ取得フィールドのスクロール
if (buttonCheck(768,0,32,160)) nowcy--;
if (buttonCheck(768,160,32,160)) nowcy++;
if (nowcy<=0) nowcy=0;
if (nowcy>=cyMax-10) nowcy=cyMax-10;
if (buttonCheck(608,320,80,32)) nowcx--;
if (buttonCheck(688,320,80,32)) nowcx++;
if (nowcx<=0) nowcx=0;
if (nowcx>=cxMax-4) nowcx=cxMax-4;

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


}

//チップ取得フィールドでボタンを押したケース
…から下の部分が追加部分。

nowChipという変数がポイント。
maptipNumber[nmx+nowmx][nmy+nowmy]=nowChip;
ここの部分を書き替えている。
取得したチップナンバーをマップに配置できるように変更した。
nowChipを複数キープし、切り替えながら使えるようにするのがベターかもしれない。
今は一番シンプルな方法にしておく。

次はPaint関数の変更点を見ていく。

maptipPaint(g);
pick_maptipPaint(g);

maptipPaintの下にpick_maptipPaintを追加した。

public void pick_maptipPaint(Graphics g) {

for (int y=0;y<=9;y++) {
for (int x=0;x<=4;x++) {
//左上から順にチップの位置を探し、適合した座標を抜き取る。
String tString=pick_maptipNumber[nowcx+x][nowcy+y];
int[] txy=gSet.maptipSearch(tString);
int dx=txy[0]*32;
int dy=txy[1]*32;
int zx=x*32+608;
int zy=y*32;

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

int[] txy=gSet.maptipSearch(nowChip);
int dx=txy[0]*32;
int dy=txy[1]*32;
g.drawImage(gData.maptipGra,768,320,768+32,320+32,dx,dy,dx+32,dy+32,this);


}

あまり補足する事は無い。ほとんどマップチップの配置と似ている。

pick_mapTipNumberというのはinitの時点で設定しておく。

//チップ取得用フィールド、の絵のナンバー。最初に一括入力しておく。
public void pick_mapTipNumberInit() {

pick_maptipNumber=new String[30][30];
for (int i=0;i<=29;i++) {
for (int j=0;j<=29;j++) {
pick_maptipNumber[i][j]="00";
}
}
String[] word= {"0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"};
for (int i=0;i<=15;i++) {
for (int j=0;j<=15;j++) {
pick_maptipNumber[j][i]=word[j]+word[i]; //x,yの順にならんでいるので、その通りに合成して格納していく。
}
}


}

何をやっているか分からないかもしれないが、
チップの数値は左上から00-ffで格納されている。
00,10,20,30....
01,11,21,31....
という具合に入れたいわけだ。

1桁目がx座標、2桁目はy座標になっている。
だから、最初の行はi(=y座標)を0で固定で0--f+0を入力。
2周目は二行目になるので、0--f+1。
そんな感じで15行分入力している。


今回はここまで。次回はボタンを追加。
編集したマップをセーブ/ロードできるようにする。



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