MAGI JAVA -Make a game in Java-
JAVA Game作成講座 012回
オブジェと接触したら反発させる


kouza012 jarファイル



[今回追加したもの]
・ARPanelクラスにObjHitCheck関数を追加
・EventExecutionクラスを作成

前回分が多すぎたので今回の追加が少なく見える。
これだけで分ける意味あるのか? という気もするが、
次で大きく処理を追加する前準備、ということで。
EventExecutionクラスはこのゲームの肝のようなもの。
今回は形だけ登録したので説明は省略する。

public void run(){

if (waitCount>=1) waitCount--;

time++;

if(time % 2 == 0){
if (gameMode==0) {
gData.pPlatform.keyCheck(keyPressTbl);

gData.pPlatform.move(gData);
gData.cameraSet(1);
objsMove();//オブジェ移動
//ブロック衝突チェック
blockHitCheck();
//オブジェ接触チェック
if (waitCount<=0) objHitCheck();
}
}else{
repaint();
}


} // end run

if (waitCount<=0) objHitCheck();
追加したのはここだけ。
waitCountはグローバル変数で新しく作った。
イベント発動するとこれが10増える。
これがある間はイベントに再度触ってもイベント発動しない。
迫ってくるイベントに何度も触れて脱出不能、
という事態を避けるための猶予時間だが、
あまり意味ないかも…。

//----------------------------------------------------------
//オブジェ接触チェック
//----------------------------------------------------------
private void objHitCheck() {

//まず、ブロックが有効なものをピックしてその対応する番号だけblockNum配列に放り込む。
int objSize=gData.objs.size();
if (objSize>=1) {
int pxy[]=gData.pPlatform.getxy(); //プレイヤーの座標とサイズを抜く。
//キー入力中のみ、少し前方のオブジェとの接触チェックを行う。
//これにより壁の上に配置したイベントもキー押し込むことで作動できる。
int[] dpxy=gData.pPlatform.getvxy();
pxy[0]+=dpxy[0];
pxy[1]+=dpxy[1];
//System.out.println("pxy x="+pxy[0]+" y="+pxy[1]);
for (int i=0; i<= objSize-1; i++) {
//int num=objNum.get(i); //リストから有効なobjの番号を取得する。
ObjectBase cObj=gData.objs.get(i);
Boolean oLive=cObj.live;
if (oLive) {
int bxy[]=cObj.getxy(); //指定objの座標とサイズを抜く。
//プレイヤーとオブジェの座標照合。ヒットしたら/フラグ出して
//1.弾く(noRide==trueのケース)
//2.乗っかったままにする(noRide==falseのケース) この場合、連続作動しないようにすること。
if (cObj.noRide==false) {
int oxy[]=collision.block(pxy,bxy);
//hitSideが0以外なら接触したとみなす。
if (oxy[2]!=0) {
gData.pPlatform.movexy(oxy[0], oxy[1]);
int evNumber=cObj.eventNumber;
if(evNumber>=1) {
waitCount=10;
}
}
}
}
}
}


}

ほとんどコメントで解説しているので言う事は無い…。

次はイベントクラスを作動させる。
一番基本の会話イベントを実行する予定。

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