RPG01

MAGI JAVA -Make a game in Java-
JAVA Game作成講座 029回
マップオブジェを動かす


kouza029 jarファイル



[マップオブジェを動かす]
自律移動するオブジェを作った。
街の人たちを歩かせたりできるが、今回は敵オブジェだけに使う。
プレイヤーを見ると追っかけてくるタイプだけ作った。
まだ不完全で、壁を貫通してくる。
次回は壁のある場所でオブジェを作り、壁との当たり判定をつける。

[ObjectBaseクラス]
public void move(GameData gData) {

if (moveType>=1) {
walkCount++;
//連続で歩く命令を入れるとカクカク方向を変えて気持ち悪いので、ある程度同方向に歩かせる。
if (walkCount>=4) {
walkCount=0;
objectMoveSet(gData);
}
}


//以下略

ここから先は以前作ったものそのまま使っている。
objectMoveSetで各種データやり取りをしているので、
それを見ていく。

//行動のセット
public void objectMoveSet(GameData gData) {

int xrange=0;
int yrange=0;
int gomove=0;
int rand=0;
int[] pxy=gData.pPlatform.getxy();
xrange=pxy[0]-(int)x;
yrange=pxy[1]-(int)y;
int halfWidth=gra.getWidth()/6; //グラのWidthは3アニメ分の幅なので、/2ではなく/6
int halfHeight=gra.getHeight()/8; //同じくHeightは上下左右の4アニメ分なので、/8
if (moveType==1) {
//プレイヤーに近づいてくるパターン。
//1.最至近のターゲットを計算する。
rand=gData.randMake(10);
//rand=2;
//5割は何もしない
if (rand>=5 && rand <=7) {
int rand2=gData.randMake(4);
if (rand2==1) gomove=ymove(yrange,halfHeight);
if (rand2==2) gomove=ymove(yrange,halfHeight);
if (rand2==3) gomove=xmove(xrange,halfWidth);
if (rand2==4) gomove=xmove(xrange,halfWidth);
}
if (rand>=7 && rand<=8) {
if (Math.abs(yrange)<=halfHeight) {
gomove=xmove(xrange,halfWidth);
} else {
gomove=ymove(yrange,halfHeight);
}
}
if (rand>=9) {
if (Math.abs(xrange)<=halfWidth) {

gomove=ymove(yrange,halfHeight);
} else {
gomove=xmove(xrange,halfWidth);
}
}
}
//移動方向が決まったら変数に移動データを入力する。
switch (gomove) {
case 2:
frictionY=1;
vy+=ACCELERATION;
break;
case 8:
frictionY=1;
vy+=-ACCELERATION;
break;
case 6:
frictionX=1;
vx+=ACCELERATION;
break;
case 4:
frictionX=1;
vx+=-ACCELERATION;
break;
}
if (gomove!=0 && shift!=gomove) shift=gomove;


}

行動を決めたら実際にvx,vyに反映する。
5割無行動、2割ランダム移動とかなり無駄な動きをさせているが、
このくらいじゃないと効率よくトレースしてきて逃げきれない。
少々バカなくらいじゃないとプレイヤーとのハンデがあり過ぎる。
xmove,ymove1では、プレイヤーとの軸合わせをしている。
プレイヤーの横幅、縦幅に収まるように座標を合わせる。

private int xmove(int xrange,int pwidth) {

int gomove=0;
vy=0;
frictionY=FRICTION;
if (xrange>=pwidth+1) {
gomove=6;
}
if (xrange<=-(pwidth+1)) {
gomove=4;
}
return gomove;


}

private int ymove(int yrange,int pheight) {

int gomove=0;

vx=0;
frictionX=FRICTION;
if (yrange>=pheight+1) {
gomove=2;
}
if (yrange<=-(pheight+1)) {
gomove=8;
}
return gomove;


}

今回は簡単すぎたかもしれないが、これも以前作ったやつを流用しているからあっさりできたが、
一から作ると結構大変。
次回は壁との当たり判定をつける。
確かARPanelでやるのでそっちの修正がメインになるはず。

それが出来たら実際に敵オブジェをダンジョンに配置する。
現状だと背景が草原だけなので、ダンジョン向きの背景を用意する。
敵のパターンも2種類と寂しいがそれはいじらない。ボスの配置だな…。
次の次でそれはやる。

それができたらタイトル画面を作ることになるだろう。
いよいよ完成が近いが一個ずつ目標を達成していく。


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