#東方弾幕風 #Title[レーザーと反射弾] #Text[レーザーと反射弾] #Image[] #BackGround[] #BGM[] #PlayLevel[Sexy] #Player[REIMU,MARISA] #ScriptVersion[2] script_enemy_main { let arrayLaser=[]; @Initialize { //敵出現時に一度だけ実行される部分 SetX(GetCenterX); SetY(GetClipMinY+120); SetLife(2000); LoadGraphic("script\img\ExRumia.png"); SetTexture("script\img\ExRumia.png"); SetGraphicRect(0, 0, 63, 63); Main; Main2; } @MainLoop { //敵のライフが0になるまで、この部分が1フレームに1回実行 SetCollisionA(GetX, GetY, 24); SetCollisionB(GetX, GetY, 24); yield; } @DrawLoop { //描画ループ。1フレームに1回実行 DrawGraphic(GetX, GetY); } @Finalize { //敵が消滅した瞬間に一度だけ実行される部分 DeleteGraphic("script\img\ExRumia.png"); } @BackGround { //スペルカード時の背景部分 //無くてもよい } task Main{ loop(100){yield;} loop{ loop(10){ let angle=-120; while(angle<=-60){ obj_shot(GetX,GetY,3,angle); angle+=15; } loop(10){yield;} } loop(100){yield;} } }//いらないものを削った task Main2{ loop(100){yield;} let angle2=0; while(angle2<360){ LaserObject(GetX,GetY,300,10,angle2,RED04); angle2+=90; } } task obj_shot(let set_x,let set_y,let speed,let angle){ let obj=Obj_Create(OBJ_SHOT);//この変数はこのタスク内のみで有効。よって[i]は不要。 ObjShot_SetGraphic(obj,BLUE21); Obj_SetPosition(obj,set_x,set_y); Obj_SetSpeed(obj,speed); Obj_SetAngle(obj,angle); let count=0; while(!Obj_BeDeleted(obj)){ if(count < 1){ if(Obj_GetX(obj)<=GetClipMinX || Obj_GetX(obj)>=GetClipMaxX) { Obj_SetAngle(obj,180-Obj_GetAngle(obj)); count++; }//せっかくだからまとめておいた。 if(Obj_GetY(obj)<=GetClipMinY) { Obj_SetAngle(obj,-Obj_GetAngle(obj)); count++; } } yield;//忘れもの。無いと無限ループでフリーズする。 } while(!Obj_BeDeleted(obj)){ let i=0; loop(length(arrayLaser)){ if(Collision_Obj_Obj(arrayLaser[i],obj)){ set_x=Obj_GetX(obj); set_y=Obj_GetY(obj); CreateShot01(set_x,set_y,1,Obj_GetAngle(arrayLaser[i])-90,GREEN21,0); Obj_Delete(obj); break; } i++; } yield; } } task LaserObject(let x,let y,let laser_length,let laser_width,let angle3,let color){ let obj=Obj_Create(OBJ_LASER); arrayLaser = arrayLaser~[obj]; Obj_SetPosition(obj,x,y); ObjShot_SetGraphic(obj,color); Obj_SetSpeed(obj,0); Obj_SetAngle(obj,angle3); ObjLaser_SetLength(obj,laser_length); ObjLaser_SetWidth(obj,laser_width); let count2=0; loop{ count2++; if(count2<200){ Obj_SetPosition(obj,x,y); Obj_SetAngle(obj,angle3); ObjLaser_SetWidth(obj,2); Obj_SetCollisionToPlayer(obj,false); ObjLaser_SetSource(obj,false); } if(count2>=200){ Obj_SetPosition(obj,x,y); Obj_SetAngle(obj,angle3); ObjLaser_SetWidth(obj,laser_width); Obj_SetCollisionToPlayer(obj,true); ObjLaser_SetSource(obj,false); } if(count2==400){count2=0;} angle3++;if(angle3>360){angle3=0} yield; } } }