第18回:召喚「豪族乱舞」 2
使い魔の召喚
前回は、呼び出される使い魔を作成しました。
今回はそれを親スクリプトで呼び出してみましょう。
まずは、親スクリプトを用意しましょう。
#東方弾幕風
#Title[召喚「豪族乱舞」]
#Text[]
#ScriptVersion[2]
script_enemy_main{
let imgBoss= "script\img\exrumia.png";
@Initialize{
SetLife(2000);
LoadGraphic(imgBoss);
SetTexture(imgBoss);
SetGraphicRect(0, 0, 63, 63);
Tmain;
}
@MainLoop{
SetCollisionA(GetX, GetY, 24);
SetCollisionB(GetX, GetY, 24);
yield;
}
@DrawLoop{
DrawGraphic(GetX, GetY);
}
@Finalize{
DeleteGraphic(imgBoss);
}
task Tmain
{
SetTimer(65);
SetMovePosition02(GetCenterX, GetClipMinY+60, 60);
wait(120);
CutIn(YOUMU, "召喚「豪族乱舞」", "", 0, 0, 0, 0);
SetScore(7000000);
wait(600);
Concentration01(60);//召喚前のチャージエフェクト
wait(60);
loop
{
yield;
}
}
function wait(w){loop(w){yield}}
function offsetX(radius,angle)
{
return radius*cos(angle);
}
function offsetY(radius,angle)
{
return radius*sin(angle);
}
}
これを、前回作ったフォルダ内に保存しましょう。
使い魔を呼び出すには、[CreateEnemyFromScript]を使います。
しかし、親スクリプト内で前回作った[Familiar.txt]内のデータを直接CreateEnemyFromScriptで呼び出すことはできません。
そのため、[インクルード]と呼ばれる処理をすることになります。
インクルード
インクルードとは、何かを「外部から呼び出して1つにまとめる」という意味で使われます。
この場合、familiar.txtを親スクリプトが呼び出し、1つにまとめるのです。
インクルードすることで親スクリプトで呼び出すことができるようになります。
インクルードには2種類有り、
関数を呼び出すもの(#include_function)と、
今回のようにスクリプトを呼び出すもの(#include_script)があります。
使う場所ですが、#include_functionはscript_enemy_mainの中括弧の中、
#include_scriptはscript_enemy_mainの中括弧の外です。
では、実際に使い、呼び出してみましょう。
script_enemy_main
{
省略
}
#include_script ".\familiar.txt"
ここで、[.\]を使っていますが、これは普通の関数では使うことができないので注意しましょう。
インクルードが終われば、親スクリプト内で使い魔を呼び出すことができるようになります。
task Tmain
{
CreateEnemyFromScript("Familiar", GetCenterX+130, GetCenterY, 0, 0, 95);//布都
CreateEnemyFromScript("Familiar", GetCenterX-130, GetCenterY, 0, 0, 80);//屠自古
SetTimer(65);
SetMovePosition02(GetCenterX, GetClipMinY+60, 60);
wait(120);
CutIn(YOUMU, "召喚「豪族乱舞」", "", 0, 0, 0, 0);
SetScore(7000000);
wait(60);
Concentration01(60);//召喚前のチャージエフェクト
wait(60);
//ここで二人が出現
loop
{
yield;
}
}
引数の内容は、
"敵スクリプト名", X座標, Y座標, 移動速度, 移動角度, 自由に使える何らかの値(今回は移動量)
となっています。
ここで、前回作ったスクリプトに変更が必要な部分が出てきました。
task Tmain
{
wait(240);
SetTexture(imgFamiliar);
SetGraphicRect(0, 0, 63, 63);
Move(GetX, 95);
Shot;
loop
{
yield;
}
}
ここです。
ここの95を[GetArgument]に変更しましょう。
GetArgumentをつかえば、「自由に使える何らかの値」を呼び出すことができます。
実際に動かしてみて、動作すれば完成です。
次回は弾画像を差し換えてみましょう。