第12回:冥符「常世桜」 2
ランダム蝶弾
今回はランダム蝶弾発射処理を実装しましょう。
Easyだと2way×2重,Normalだと4way×2重,Hardだと4way×3重,そんでLunaticが4way×4重です。
今回はNormalなので、4way×2重です。
nway弾を発射する部分は関数にまとめてしまいましょう。
function nway(x, y, speed, anglebase, way, span, color)
{
let angle = anglebase - (way - 1) / 2 * span;
loop(way)
{
CreateShot01(x, y, speed, angle, color, 10);
angle += span;
}
}
x, y:発射座標
speed:弾速
anglebase:発射角度
way:way数
span:弾同士の間隔
color:弾種
これでn-way弾を発射することが出来ます。
2重弾を発射する部分も関数にまとめてしまいましょう。
function shot(speed, way, nloop)
{
let angle = rand(180-25, 360+25);
loop(nloop)
{
nway(GetX, GetY, speed, angle, way, 10, BLUE22);
speed-=0.5;
}
}
speed:弾速
way:way数
nloop:何重弾にするか
次は、発射間隔を短くする処理です。
これは直接[Tmain]の中に書きましょう。
task Tmain
{
SetMovePosition02(GetCenterX, GetCenterY, 60);
wait(60);
let frame = 50;
loop
{
shot(4, 4, 2);//最高速度4,4way,2重弾を発射
wait(frame);//frameフレームだけ待機
if(frame>30){frame-=0.5;}//frameが30より大きいときだけframeの値を0.5ずつ引く
}
}
これらを使って実際にスクリプトを書いてみましょう。
task Tmain
{
SetMovePosition02(GetCenterX, GetCenterY, 60);
wait(60);
let frame = 50;
loop
{
shot(4, 4, 2);
wait(frame);
if(frame>30){frame-=0.5;}
}
}
function shot(speed, way, nloop)
{
let angle = rand(180-25, 360+25);
loop(nloop)
{
nway(GetX, GetY, speed, angle, way, 10, BLUE22);
speed-=0.5;
}
}
function nway(x, y, speed, anglebase, way, span, color)
{
let angle = anglebase - (way - 1) / 2 * span;
loop(way)
{
CreateShot01(x, y, speed, angle, color, 10);
angle += span;
}
}
これで常世桜っぽくなってきました。
次回は反射弾を実装してみましょう。