// 反射弾 // x 発射X座標 // y 発射Y座標 // speed 初速度 // angle 角度 // plus 加速度 // ms 最大速度 // type 弾画像タイプ // delay 遅延時間 // r_left 左で何回反射するか // r_right 右で何回反射するか // r_top 上で何回反射するか // r_bottom 下で何回反射するか // killtime 残存時間 task CreateReflectShot02(x, y, speed, angle, plus, ms, type, delay, r_left, r_right, r_top, r_bottom, killtime) { let obj = Obj_Create(OBJ_SHOT); // 弾の基本パラメータ Obj_SetPosition(obj, x, y); Obj_SetSpeed(obj, speed); Obj_SetAngle(obj, angle); ObjShot_SetGraphic(obj, type); ObjShot_SetDelay(obj, delay); // 反射を制御する部分 // 弾が消えるまで繰り返し while(Obj_BeDeleted(obj) == false) { // 左の壁で反射 if(Obj_GetX(obj) <= GetClipMinX) { // 反射可能回数が0以上なら反射 if(r_left > 0) { angle = 180 - angle; } r_left --; } // 右の壁で反射 if(Obj_GetX(obj) >= GetClipMaxX) { // 反射可能回数が0以上なら反射 if(r_right > 0) { angle = 180 - angle; } r_right --; } // 上の壁で反射 if(Obj_GetY(obj) <= GetClipMinY) { // 反射可能回数が0以上なら反射 if(r_top > 0) { angle = -angle; } r_top --; } // 下の壁で反射 if(Obj_GetY(obj) >= GetClipMaxY) { // 反射可能回数が0以上なら反射 if(r_bottom > 0) { angle = -angle; } r_bottom --; } Obj_SetAngle(obj, angle); // 弾を加速 speed += plus; if(speed >= ms) { speed = ms; } Obj_SetSpeed(obj, speed); // 弾の寿命を縮める killtime --; if(killtime <= 0) { Obj_Delete(obj); } yield; } }