#東方弾幕風 #Title[試符「オブジェクトタスク 〜 全反射」] #Text[反射弾・オブジェクト弾・マイクロスレッドのサンプルです。] #Player[FREE] #ScriptVersion[2] script_enemy_main { let frame = 0; let shotangle = 0; @Initialize { CutIn(YOUMU, "試符「オブジェクトタスク 〜 二段反射」", "", 0, 0, 0, 0); SetX(GetCenterX); SetY(GetClipMinY - 120); SetTimer(60); SetLife(4000); SetDamageRate(100,100); SetScore(10000000); SetMovePosition03(GetCenterX,GetClipMinY+170,10,6); MainTask; //行動を制御するためのタスクを起動 } @MainLoop { SetCollisionA(GetX, GetY, 48); yield; //必須部分 } @DrawLoop { } @Finalize { } /*========================行動を制御するためのタスク=========================*/ task MainTask { loop(60){yield;}; //60フレーム待つ loop { if(frame%120==0){ //120フレーム毎に行動 loop(30){ //オブジェクト弾のタスクを起動 ReflectShot(GetX,GetY,GetAngleToPlayer+shotangle,3,RED01,PURPLE01,BLUE01,10); ReflectShot(GetX,GetY,GetAngleToPlayer+shotangle,3.1,RED02,PURPLE02,BLUE02,10); shotangle+=12; } } frame++; yield; //必須部分 } } /*================オブジェクト弾を発射、制御するためのタスク=================*/ task ReflectShot (x,y,angle,speed,graphic1,graphic2,graphic3,delay) { // ()の中の引数は追加したりできます // x,y 発射座標 //angle 発射角度 //speed 速度 //graphic1 最初の弾画像 //graphic2 一回反射した後の弾画像 //graphic3 二回反射した後の弾画像 //delay 遅延時間 let obj = Obj_Create(OBJ_SHOT); let reflect = 2; Obj_SetPosition(obj,x,y); //位置を設定 Obj_SetSpeed(obj,speed); //速度を設定 Obj_SetAngle(obj,angle); //角度を設定 Obj_SetAutoDelete(obj,false); //画面外で自動で消えるかどうかを設定 Obj_SetCollisionToPlayer(obj,true); //プレイヤーに対して当たり判定があるかどうかを設定 ObjShot_SetDelay(obj,delay); //遅延時間を設定 ObjShot_SetBombResist(obj,true); //ボムで消えるかどうかを設定 ObjShot_ToItem(obj,true); //消えたあとアイテムに変わるかどうか設定 loop { if(Obj_BeDeleted(obj)==true){break;} //もし弾が消えていたらループから離脱(=このタスクを終了) if(reflect>0){ if(Obj_GetX(obj)<=GetClipMinX){Obj_SetAngle(obj,180-Obj_GetAngle(obj));reflect--;} //左端反射 else if(Obj_GetX(obj)>=GetClipMaxX){Obj_SetAngle(obj,180-Obj_GetAngle(obj));reflect--;} //右端反射 else if(Obj_GetY(obj)<=GetClipMinY){Obj_SetAngle(obj,-Obj_GetAngle(obj));reflect--;} //上端反射 //else if(Obj_GetY(obj)>=GetClipMaxY){Obj_SetAngle(obj,-Obj_GetAngle(obj));reflect--;} //下端反射 } //弾の画像の制御 if(reflect<=0){ObjShot_SetGraphic(obj,graphic3);} else if(reflect<=1){ObjShot_SetGraphic(obj,graphic2);} else if(reflect<=2){ObjShot_SetGraphic(obj,graphic1);} //画面より50外に出たら消える if(Obj_GetX(obj)<=GetClipMinX-50 || Obj_GetX(obj)>=GetClipMaxX+50 || Obj_GetY(obj)<=GetClipMinY-50 || Obj_GetY(obj)>=GetClipMaxY+50){Obj_Delete(obj);} yield; //必須部分 } } /*===========================================================================*/ }