$Effectクラス(一部)
|
if (p=="Magic"){
p=-1;
zOrder=-7;
anim=newAnimation();
anim.swing($pat_weapon+2,$pat_weapon+2,3);
$Mychar.p=$pat_chara+2;
for (i=0;i<20;i++){
x=$Mychar.x+$Mychar.f*15;
y=$Mychar.y+3;
drawSprite($Mychar.x+$Mychar.f*9,$Mychar.y+3,$pat_arm+0,
$Mychar.f, 1);
if (i==3) appear(new Weapon_My(x,y,"refrection"));
update();
}
$Mychar.onAttack=0;
}
|
攻撃パターン - 魔法(5連弾)とほとんど変わりません。違いは攻撃までのタメの時間を短くしたこと、呼び出しが"refrection"になっていることくらいです。
$Weapon_Myクラス(一部)
|
if (p=="refrection"){
x=$Mychar.x+$Mychar.f*10;
y=$Mychar.y;
f=$Mychar.f;
p=$pat_weapon+1;
zOrder=3;
erase=1;
ATC=3;
if (f== 1) {vx= 1; vy=-1;}
if (f==-1) {vx=-1; vy=-1;}
for(i=0;i<500;i++){
tx=x; ty=y;
WallHit_chk2();
if (wX==1 || wX==-1) {vx=-vx;x+=vx;}
if (wY==1 || wY==-1) {vy=-vy;y+=vy;}
if (vx<0) f=-1;
if (vx>0) f= 1;
x+=vx; y+=vy;
if (f== 1) angle=angle(tx-x,ty-y)+180;
if (f==-1) angle=angle(tx-x,ty-y);
if ($map.getAt(x,y)>=$pat_block+20 && $map.getAt(x,y)
<=$pat_block+39) die();
if (i%5==1) update();
}
}
|
if (p=="refrection")・・・からfor文までの間は初期設定です。自機の座標を初期位置に与えて、向きに応じて初期の速度vx,vyを決めています。
for文の中では、まず弾と壁の当たりを調べます。WallHit_chk2()がこれに該当します。このルーチンは自機の移動 - 左右移動などであつかっている壁上下左右の当たり判定とほぼ同じです。詳細は割愛します。
その後、弾-壁の位置関係に応じて速度と向きを変化させています。if (wX==1 || wX==-1)・・・がこの部分です。後は向きに応じて角度を変えたり、壁にめり込んだら弾を消去するなど細かな部分が入ります。for文の終了判定条件、i<500の数値を大きくすると弾を発射してから消えるまでの時間を長くすることができ、攻撃範囲が大きくなります。
|
|
|
|