#東方弾幕風 #Title[obj] #Text[SampleC01:オブジェクト操作関数を用いた弾作製] #Image[] #BackGround[User] #ScriptVersion[2] script_enemy_main { let count=0;//弾を出す間隔を制御するための変数 let cx=GetCenterX();//変数cxに中心x座標を代入 let cy=GetCenterY();//変数cxに中心y座標を代入 let imgExRumia="script\img\ExRumia.png"; @Initialize() { SetLife(1000);//敵のライフを1000に設定 SetDamageRate(7,0.1); SetGraphicRect(64,1,127,64);//描画元の矩形を(64,1)-(127,64)に設定 LoadGraphic(imgExRumia);//画像「img\ExRumia.png」を読みこむ SetMovePosition02(cx,cy,60);//座標(cx,cy)に60フレームで移動 } @MainLoop() { if(count==0&&GetEnemyY>=20) { let angle=0;//10°間隔で全方位に弾を発射 //弾タスク起動 ShotObject; angle+=10; count++;//1フレーム毎にcountが1増加 } if(GetEnemyLife<=500&&count<=1){ ShotObject; count++; }if(GetEnemyLife<=250&&count<=2){ ShotObject; count++; } SetCollisionA(GetX(),GetY(),32);//敵の座標に当たり判定を登録 SetCollisionB(GetX(),GetY(),24);//敵の座標に当たり判定(体当たり用)を登録 yield;//毎フレームタスク復帰 } @DrawLoop() { SetTexture(imgExRumia); DrawGraphic(GetX(),GetY());//敵の座標にExルーミアを描画; } @Finalize() { DeleteGraphic(imgExRumia); } task ShotObject { //弾タスク初期化 let angle =0; let objShot = Obj_Create(OBJ_SHOT); Obj_SetX(objShot, GetX);//x座標設定 Obj_SetY(objShot, GetY);//y座標設定; Obj_SetSpeed(objShot, 1.8);//速度設定 ObjShot_SetGraphic(objShot, RED03);//画像設定 Obj_SetAngle(objShot, rand(0,360));//角度 ObjShot_SetBombResist(objShot,true); while( !Obj_BeDeleted(objShot) ) {//削除されるまでループを実行 if(Obj_GetX(objShot) <= 32|| Obj_GetX(objShot) >= 416|| Obj_GetY(objShot) <= 16||Obj_GetY(objShot)>=464){ if(Obj_GetX(objShot) <= 32){ Obj_SetAngle(objShot, rand(-90,90)); }if(Obj_GetX(objShot) >= 416){ Obj_SetAngle(objShot, rand(90,270)); }if(Obj_GetY(objShot) <= 16){ Obj_SetAngle(objShot, rand(0,180)); }if(Obj_GetY(objShot)>=464){ Obj_SetAngle(objShot, rand(0,-180)); } angle=rand(20,0); loop(36){ CreateShot01(Obj_GetX(objShot),Obj_GetY(objShot),1.65,angle,RED22,30); angle+=20; } if(Obj_GetSpeed(objShot)<=4){ Obj_SetSpeed(objShot,Obj_GetSpeed(objShot)+0.05); } } yield; } } }