RPG01

MAGI JAVA -Make a game in Java-
JAVA Game作成講座 030回
マップオブジェと壁の当たり判定を作る


kouza030 jarファイル



[マップオブジェと壁の当たり判定を作る]
前回作ったものを少しだけアレンジし、壁を通過できないようにした。
objectBaseクラスのblockPassingという変数がfalseになっているオブジェは壁を通過できない。
オブジェ作成時にtrueになるように設定し直している。
blockPassing==falseのオブジェのみ、blockとの当たり判定チェックを行っている。
では実際の処理を見て行く。ARPanelに処理を追加した。

[ARPanelクラス]
//----------------------------------------------------------
//オブジェ移動
//----------------------------------------------------------
private void objsMove() {

int objSize=gData.objs.size();
if (objSize >=1) {
for (int i=0; i<= objSize-1; i++) {
gData.objs.get(i).move(gData); //移動の判断にプレイヤーの座標を使うので、gDataごと渡す。
if (gData.objs.get(i).blockPassing==false) objBlockHitCheck(gData.objs.get(i));
}
}


}
blockPassing==falseのオブジェのみ、ブロックとの当たり判定をチェックしている。
全てのオブジェでこれを通過させると、壁の上に載っているオブジェが全て壁の外にはじき出される。
カウンターの上に乗っている会話イベントなども…。
だから、敵のマップオブジェ作成時のみ、blockPassing=falseにしている。
他のオブジェは原則trueのままで通す。そういうオブジェの方が多いので。

GameDataクラスのmapEnemySet1関数を少し修正した。
public void mapEnemySet1(int x,int y,int shift,int granum,int evnum,int moveType,int dt1,int dt2) { 中略
obj.setMapSize(mapSize[0]*32, mapSize[1]*32);
obj.blockPassing=false;
objs.add(obj);
以下略

このオブジェ設定関数のみ、blockPassingをfalseにしている。
壁を通過する幽霊みたいなオブジェにしてもいいのだが、
今回は敵オブジェは全て壁を貫通して移動できないようにした。

//----------------------------------------------------------
//ブロック衝突チェック
//----------------------------------------------------------
private void objBlockHitCheck(ObjectBase obj) {

//まず、ブロックが有効なものをピックしてその対応する番号だけblockNum配列に放り込む。
int blocksSize=gData.blocks.size();
//ブロックが一個以上あれば当たり判定チェックに入る。
if (blocksSize >= 1) {
//プレイヤーとブロックのチェックから
int pxy[]=obj.getxy(); //プレイヤーの座標とサイズを抜く。
for (int i=0; i<= blocksSize-1; i++) {
int bxy[]=gData.blocks.get(i).getxy();
int oxy[]=collision.block(pxy,bxy);
//重なっている分を強引に押し戻す。
if (oxy[2]!=0) obj.movexy(oxy[0], oxy[1]);
}
}


}

プレイヤーの衝突チェックは省略。
それをアレンジし、オブジェ専用の衝突チェックを作った。
共通した物に作り替えようと思ったが、10数行追加するだけなので別口で作った。
特筆して解説する部分はない。

今回はこれだけ。非常に簡単だが、一気に追加すると訳が分からなくなるので小分けに作った。
次回は戦闘場面の背景をダンジョン、草原とつかいわけるようにする。
敵シンボルに触れたら戦闘に入る様にする。
同時に、戦闘に負けたら拠点へ飛ばされる処理を追加する。


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