攻撃パターン - 魔法(反射弾)と同じく、地形を判定して進行方向を決定します。
$Weapon_Myクラス(一部)
|
if (p=="rotate"){
x=$Mychar.x+$Mychar.f*20;
y=$Mychar.y;
p=$pat_weapon+1;
f=$Mychar.f;
erase=0; //敵に当たったとき貫通
ATC=3; //攻撃力
while(1){ //壁にタッチしていない場合壁にあたるまで落下を続ける
WallHit_chk2();
if (wY==0 || wY==-1) y+=3;
if (wY==1 || wY== 2) break;
update();
}
for(i=0;i<500;i++){
WallHit_chk2();
if (f==-1){ //左回りの移動部
if (wX== 1 && wY== 0) vy= 1;
if (wX== 1 && wY== 1) vx=-1;
if (wX== 0 && wY== 1) vx=-1;
if (wX==-1 && wY== 1) vy=-1;
if (wX==-1 && wY== 0) vy=-1;
if (wX==-1 && wY==-1) vx= 1;
if (wX== 0 && wY==-1) vx= 1;
if (wX== 1 && wY==-1) vy= 1;
if (wX== 0 && wY== 0) {
if(isblock($map.getAt(x+14,y+14))) vy= 1;
if(isblock($map.getAt(x+14,y-14))) vx= 1;
if(isblock($map.getAt(x-14,y-14))) vy=-1;
if(isblock($map.getAt(x-14,y+14))) vx=-1;
}
angle-=3;
}
if (f==1){ //右回りの移動部
・・・中略
}
x=x+vx; y=y+vy;
if (i%3==0) update(); //数値3を変えると速度が変化します。
if (isblock($map.getAt(x ,y))) die(); //壁にめり込んだら消去
if (isblock($map.getAt(x-8,y))) die();
if (isblock($map.getAt(x+8,y))) die();
if (abs(angle)>=360) angle=0;
vx=0; vy=0;
}
}
|
弾の周りに壁が存在しない場合、座標yに3を足しつづけ、壁に接触するまで落下を続けます。壁に接触したら、自機の向きに応じて、左回りか右回りかを決定します。
あとは壁の接触状態(下に接しているか、右に接しているかなど)で速度vx,vyを決定し、x,yに足しこんで移動が完了します。
壁際で魔法を使った場合、弾がめり込むので動きがとれなくなります。この防止策のため、めり込んだら消去する文を3つ追加しています。
|
|
|
|