#東方弾幕風 #Title[テストスクリプト] #Text[テストスクリプト] #ScriptVersion[2] script_enemy_main { // レーザーの長さは12通りの値を行き来する let aryLength = [10,20,40,80,120,150,160,150,120,80,40,20]; @Initialize { SetX(GetCenterX); SetY(GetClipMinY + 120); SetLife(2000); LoadGraphic("script\img\ExRumia.png"); SetTexture("script\img\ExRumia.png"); SetGraphicRect(0, 0, 63, 63); Main; } @MainLoop { SetCollisionA(GetX, GetY, 24); SetCollisionB(GetX, GetY, 24); yield; } @DrawLoop { DrawGraphic(GetX, GetY); } @Finalize { DeleteGraphic("script\img\ExRumia.png"); } task Main { // ControlObjLaserに渡すFirstLength。最初は0 let j = 0; ascent( let i in 0..45) loop { ControlObjLaser(GetCenterY + (i * 10) - 220,j); // 番号は遡る必要がある。下のレーザーは上のレーザーを真似るため。 // 12を超えてはいけないため、12で割った余りを求める。(12=0) j = (j + 11) % 12; } } task ControlObjLaser(Y,FirstLength) { let Obj = Obj_Create(OBJ_LASER); // li = LengthIndexの略。現在どの長さを取っているかを示す let li = FirstLength; Obj_SetPosition(Obj,GetCenterX-200,Y); Obj_SetAngle(Obj,0); Obj_SetSpeed(Obj,0); ObjShot_SetGraphic(Obj,RED11); ObjShot_SetDelay(Obj,0); ObjLaser_SetLength(Obj,aryLength[li]); ObjLaser_SetWidth(Obj,10); ObjLaser_SetSource(Obj,false); // オブジェクトが削除されるまで繰り返す while (Obj_BeDeleted(Obj) == false) { loop(10) { yield; } // 12を超えてはいけないため、12で割った余りを求める。(12=0) li = (li + 1) % 12; ObjLaser_SetLength(Obj,aryLength[li]); } } }