#東方弾幕風 #Title[撃って戻ってver2] #Text[test] #ScriptVersion[2] /* yieldによって、まず@〜Hの順番で処理が進む */ script_enemy_main { let frame = 0; let frame2 = 0; let kakudo = 0; @Initialize{ SetX(GetCenterX); SetY(GetClipMinY+120); SetLife(2000); LoadGraphic("script\img\ExRumia.png"); SetTexture("script\img\ExRumia.png"); SetGraphicRect(0, 0, 63, 63); Main; /* Main を起動 …@ */ Main2; /* Main2 を起動 …C */ Main3; /* Main3 を起動 …F */ /* Hまで行ったら、@Initialize終了。@MainLoopへ。 */ } @MainLoop { frame++; frame2++; if(frame == 1500){ frame=100 } if(frame2 == 1500){ frame=100 } SetCollisionA(GetX, GetY, 24); SetCollisionB(GetX, GetY, 24); yield; /* ここで、一時中断していたtaskに処理が戻る。   以下、Main→(一時中断)→Main2→(一時中断)→Main3→(一時中断)→Main→いt(ry という風に処理が続く。 */ } @DrawLoop{DrawGraphic(GetX, GetY);} @Finalize{DeleteGraphic("script\img\ExRumia.png");} task Main { /* Mainでの処理 …A */ loop(100){yield;} loop{ //frameが100から850の間繰り返すスクリプト if(frame>=100 && frame<=850){ loop(5){ loop(10){yield;} let angle=0; //角度を0にしておいて、while構文が終わって戻ってくるたびに0に初期化される //下のangleが360を満たすまで繰り返す while(angle<360){ SetShotDirectionType(PLAYER); //自機狙いにする方法 CreateShotA(1,300,150,0); //発射位置 SetShotDataA(1,0,0,angle,0,0,NULL,RED32); //0フレーム時の処理 //以下弾道動作 SetShotDataA(1,1,6,angle,0,0,6,RED32); SetShotDataA(1,30,-6,NULL,0,0,6,RED32); SetShotDataA(1,60,6,NULL,0.0,0,6,RED32); FireShot(1); //発射 angle+=5; //全方位弾の角度を決める } /* whileの終わり */ } /* loop(5)の終わり */ loop(100){yield;} } /* if(frame...)の終わり */ yield; /* これが無いと無限ループする。   ここでMainを一時中断して、Mainを起動したところ(…@)に戻る。 …B */ } /* loopの終わり */ } /* Mainの終わり */ task Main2 { /* Main2での処理 …D*/ loop(150){yield;} loop{ //frameが150から900の間だけ繰り返すスクリプト if(frame>=150 && frame<=900){ loop(5){ loop(10){yield;} let angle=0; //角度を0にしておいて、while構文が終わって戻ってくるたびに0に初期化される //下のangleが360を満たすまで繰り返す while(angle<360){ SetShotDirectionType(PLAYER); //自機狙いにする方法 CreateShotA(2,150,150,0); //発射位置 SetShotDataA(2,0,0,angle,0,0,NULL,BLUE32); //0フレーム時の処理 //以下弾道動作 SetShotDataA(2,1,6,angle,0,0,6,BLUE32); SetShotDataA(2,30,-6,NULL,0,0,6,BLUE32); SetShotDataA(2,60,6,NULL,0,0,6,BLUE32); FireShot(2); //発射 angle+=5; //全方位弾の角度を決める } /* whileの終わり */ } /* loop(5)の終わり */ loop(100){yield;} } /* if(frame...)の終わり */ yield; /* これが無いと無限ループする。   ここでMainを一時中断して、Main2を起動したところ(…C)に戻る。 …E */ } /* loopの終わり */ } /* Main2の終わり */ task Main3 { /* Main3での処理 …G*/ loop(100){yield;}//発射するまでの待ち時間が100フレーム loop{ //カウントが1000以上かつ1250以下なら繰り返すスクリプト if(frame2>=1000 && frame2<=1250){ //5フレーム間隔の弾を50発撃つ loop(50){ loop(5){yield;} let angle=0; //角度を0にしておいて、while構文が終わって戻ってくるたびに0に初期化される //下のangleが360を満たすまで繰り返す while(angle<360){ CreateShotA(3,400,150,0); //発射位置 SetShotDataA(3,0,0,angle,0,0,NULL,RED32); //0フレーム時の操作 SetShotDataA(3,1,6,angle,0,0,6,RED32); //弾道操作 angle+=10; } /* whileの終わり */ } /* loop(50)の終わり */ } /* if(frame2...)の終わり */ //カウントが1250以上かつ1500以下なら繰り返すスクリプト if(frame2>=1250 && frame2<=1500){ //5フレーム間隔の弾を50発撃つ loop(50){ kakudo++; //角度を1ずつずらしていく loop(5){yield;} let angle=0; //角度を0にしておいて、while構文が終わって戻ってくるたびに0に初期化される //下のangleが360を満たすまで繰り返す while(angle<360){ CreateShotA(4,400,150,0); //発射位置 SetShotDataA(4,0,0,angle,0,0,NULL,RED32); //0フレーム時の操作 SetShotDataA(4,1,6,angle,0,0,6,RED32); //弾道操作 angle+=10; //全方位弾の角度を決める } /* whileの終わり */ } /* loop(50)の終わり */ } /* if(frame2...)の終わり */ kakudo=0; loop(200){yield;} yield; /* これが無いと無限ループする。   ここでMain3を一時中断して、Main3を起動したところ(…7)に戻る。 …\H/*/ } /* loopの終わり */ } /* Main3の終わり */ }