#東方弾幕風[Single] #ScriptVersion[3] #Title["SampleA01"] #Text["SampleA01:弾を真下に出す"] //デフォルト弾画像をロード #include"script/default_system/Default_ShotConst.txt" //---------------------------------------------------- //グローバル変数宣言 //この位置で宣言した変数はスクリプト全体で有効です。 //ただしこの箇所での変数への代入は、定数以外の代入は行えません。 //(実行順序が保障されないため乱数などの使用はできません) //---------------------------------------------------- let objEnemy; //敵オブジェクト let frame = 0; //敵動作に使用するカウンタ(@MainLoopで1づつ増加させます) //---------------------------------------------------- //敵の動作 //---------------------------------------------------- @Event { alternative(GetEventType()) case(EV_REQUEST_LIFE) { //敵ライフを要求された SetScriptResult(500);//ライフを500に設定 } } @Initialize { //敵オブジェクトを生成し登録 objEnemy = ObjEnemy_Create(OBJ_ENEMY_BOSS); ObjEnemy_Regist(objEnemy); //敵画像の設定 let imgExRumia = GetCurrentScriptDirectory ~ "ExRumia.png"; //敵画像ファイル ObjPrim_SetTexture(objEnemy, imgExRumia); //画像ファイルを読み込む ObjSprite2D_SetSourceRect(objEnemy, 64, 1, 127, 64); //描画元矩形を(64,1) - (127,64)に設定 ObjSprite2D_SetDestCenter(objEnemy); //描画先を中心(0, 0)に設定 //座標(cx, 60)へ60フレームかけて移動する let cx = GetStgFrameWidth() / 2;//STGシーンの中心x座標を取得 ObjMove_SetDestAtFrame(objEnemy, cx, 60, 60); } @MainLoop { //敵の座標を取得 let ex = ObjMove_GetX(objEnemy); let ey = ObjMove_GetY(objEnemy); if(frame == 60) { //frameが60になったら実行される部分 //・敵の座標から真下に向かって弾を発射する //・速度:1フレームに3 //・角度:90 (真下) //・遅延時間:30フレーム CreateShotA1(ex, ey, 3, 90, DS_BALL_S_RED, 30); frame = 0;//弾を出したらframeを0にする } //当たり判定登録 ObjEnemy_SetIntersectionCircleToShot(objEnemy, ex, ey, 32);//当たり判定(自機弾用)登録 ObjEnemy_SetIntersectionCircleToPlayer(objEnemy, ex, ey, 24);//当たり判定(体当たり用)登録 //カウンタに1追加 frame++; //ライフ0処理 if(ObjEnemy_GetInfo(objEnemy, INFO_LIFE) <= 0) { //ライフが0になったら即座に終了 //本来は爆発エフェクトのタスクを登録し、 //エフェクト終了を待って、スクリプトを終了します。 Obj_Delete(objEnemy); CloseScript(GetOwnScriptID()); return; } }