//(X,Y,速度,角度,長さ,太さ,画像,延長時間) task HomingLaser(let x, let y, let speed, let angle,let long,let wide,let gra,let delay) { //弾タスク初期化 let count = 0; let spd=0; let hmp=0.5; let obj = Obj_Create(OBJ_SINUATE_LASER);//オブジェクトを作成 Obj_SetX(obj, x);//x座標設定 Obj_SetY(obj, y);//y座標設定; Obj_SetSpeed(obj, speed);//速度設定 Obj_SetAngle(obj, angle);//移動角度設定 ObjShot_SetGraphic(obj, gra);//画像設定 ObjShot_SetDelay(obj, delay);//遅延時間設定 ObjSinuateLaser_SetLength(obj,long);//長さ設定 ObjSinuateLaser_SetWidth(obj,wide);//幅設定 while( !Obj_BeDeleted(obj) ) {//削除されるまでループを実行 count++; if(count>0&&count<=40&&speed-spd>0){//減速 Obj_SetSpeed(obj,speed-spd);//速度設定 spd+=0.12; } if(count>40){//加速 Obj_SetSpeed(obj,speed-spd);//速度設定 hmp=0.75; spd-=0.2; } if(GetX<=GetClipMinX-0||GetX>=GetClipMaxX+0||GetY<=GetClipMinY-0||GetY>=GetClipMaxY+0){ hmp=100; } //ホーミング let toAngle=atan2(GetPlayerY()-Obj_GetY(obj), GetPlayerX()-Obj_GetX(obj));//自機方向の角度取得 //dAngle:1フレームあたりの角度変化量限界 //dAngleを増加させるほどホーミング性能が増す let dAngle=2; let ret=toAngle-angle; if((ret>0&&ret<=180)||(ret<0&&ret<=-180)){angle+=dAngle/hmp;} else if((ret>0&&ret>180)||(ret<0&&ret>-180)){angle-=dAngle/hmp;} if(angle>=360){angle-=360;}//360°以上なら0〜360内に補正 if(angle<0){angle+=360;}//0°未満なら0〜360内に補正 Obj_SetAngle(obj, angle); yield; } }