マスクを使う
Posted 2013.03.03 in 流動指向ゲームエンジン『Fooo』
バッファデーカーは子デーカーの表示をバッファの領域内に制限するので
ウィンドウデーカーのような用途でも使用できる。
実はウィンドウデーカーには「回転できない」という欠点がある。
ただしその分非常に高速に動作する。
バッファデーカーはウィンドウデーカーよりもかなり低速だが、
画像として扱えるのでもちろん回転も可能だ。
しかしウィンドウデーカーもバッファデーカーも表示を制限できるのは四角の形だけである。
丸形や星形に表示を制限するといったようなことはできない。
マスクデーカー
バッファデーカーを拡張し、自由な形に表示制限できる窓を実現するのがマスクデーカーである。
マスクデーカーはマスク画像を使ってバッファに写しこまれた画像に透明部分を設定する。
バッファは画像として扱えるのだから、バッファの表示を制限したい部分を透明にしてやれば、
自由な形に表示を制限することができるという寸法だ。
マスクデーカーを作成するにはCreateMask命令を使用する。
CreateMask(name="マスク", mask="マスク.png");
組み込んでみよう。
class 煙クラス
{
method 煙クラス()
{
}
method OnEnter()
{
int $number = 0;
while(true)
{
string $name = "煙粒"+String($number++);
ThreadCreate(call=@煙粒スレッド(name=$name));
wait 100;
}
}
method 煙粒スレッド(string $name)
{
CreateImage(name=$name
, x=0, y=0, sx=20%, sy=20%, ox="Center", oy="Middle"
, angle=rand_range(0,359), image="煙粒.png");
Enter(to=$name);
int $time = 2000;
int $angle = 90+rand_range(-10,10);
float $rad = radian(Float($angle));
float $move = 300.0;
float $x = $move*cos($rad);
float $y = -$move*sin($rad);
Move(to=$name, time=$time, x=$x, y=$y, step="DecSin");
Zoom(to=$name, time=$time, sx=200%, sy=200%);
Opaque(to=$name, time=$time, alpha=0%, step="AccSin");
WaitDecor(to=$name);
Delete(to=$name);
}
}
method Test(string $effect)
{
Transform(to="マスク", effect=$effect, time=1000);
wait 1000;
Transform(to="マスク", effect=$effect, time=1000, begin=100%, end=0%);
wait 1000;
}
method Main()
{
CreateImage(name="画像2", image="画像2.png");
CreateMask(name="マスク", mask="マスク.png");
CreateImage(name="マスク/画像1", image="画像1.png");
CreateObject(name="マスク/煙", x=1280/2, y=720/2+150, class=@煙クラス());
Enter(to="*");
Enter(to="マスク/*");
wait 3000;
call @Test(effect="LinearLeft");
call @Test(effect="BlindLeft");
call @Test(effect="CurtainLeft");
call @Test(effect="ShaveLeft");
call @Test(effect="SlashH");
call @Test(effect="BoxCenter");
call @Test(effect="HoleCenter");
call @Test(effect="FanCenter");
call @Test(effect="TensileLeft");
call @Test(effect="Mosaic");
}
今回も変更点はごく僅かだ。
このようにFoooではデーカーの「組み合わせ方」を利用した機能がとても多く
Foooの大きな特徴の一つである。