//製作tbb //正多角形タスク(星型正多角形含む) //正n/m角形において一つの角が180*(n/m-2)/(n/m)となるとします。 //正5/1角形は正五角形,正5/2角形は五芒星,正6/2角形は六芒星となります。 //r:半径,cx・cy:中心座標,v:速度,dir:方向角度,sangle:図形の角度(方向角度に対して時計回りのずれ角度),w:回転の角速度,graphic:画像,delay:遅延時間 task RegularPolygon(r,n,m,cx,cy,v,dir,sangle,w,graphic,delay){ let interval=1;//弾と弾の間隔。弾や大きさによって変えたほうがいいかも let angle=dir+sangle;//一辺のはじめの点の中心からの角度 loop(n){ RegularPolygonSide(r,n,m,cx,cy,v,dir,angle,w,graphic,delay,interval); angle+=360/n; } } //一辺タスク task RegularPolygonSide(r,n,m,cx,cy,v,dir,angle,w,graphic,delay,interval){ let angle2=180*(n/m-2)/(n/m);//一つの角 let len=r*cos(angle2/2)*2;//一辺の長さ let qauntity=len/interval;//一辺の弾の数 let num=1; loop(qauntity){ RegularPolygonShot(r,cx,cy,v,dir,angle,w,graphic,delay,angle2,interval,num); num++; } } //一粒タスク task RegularPolygonShot(r,cx,cy,v,dir,angle,w,graphic,delay,angle2,interval,num){ let obj = Obj_Create(OBJ_SHOT);//オブジェクト弾作成 ObjShot_SetGraphic(obj, graphic);//画像設定 ObjShot_SetDelay(obj,delay);//遅延時間設定 while(!Obj_BeDeleted(obj)){ let angle3=(180+angle)-angle2/2;//一辺の角度 let sx=cx+r*cos(angle); let sy=cy+r*sin(angle);//一辺の始まる座標設定 let x=sx+interval*cos(angle3)*num; let y=sy+interval*sin(angle3)*num;//点の座標設定 Obj_SetPosition(obj,x,y); Obj_SetAngle(obj,angle3); yield; cx+=v*cos(dir); cy+=v*sin(dir);//中心座標の移動 angle+=w;//回転 if(angle>=360){angle-=360;} } } //正多角形タスク(星型正多角形含む) //width:レーザー幅 task RegularPolygonLaser(r,n,m,cx,cy,v,dir,sangle,w,graphic,delay,width){ let angle=dir+sangle;//一辺のはじめの点の中心からの角度 loop(n){ RegularPolygonLaserSide(r,n,m,cx,cy,v,dir,angle,w,graphic,delay,width); angle+=360/n; } } //一辺レーザー task RegularPolygonLaserSide(r,n,m,cx,cy,v,dir,angle,w,graphic,delay,width){ let angle2=180*(n/m-2)/(n/m);//一つの角 let len=r*cos(angle2/2)*2;//一辺の長さ let obj = Obj_Create(OBJ_LASER);//オブジェクト弾作成 ObjShot_SetGraphic(obj, graphic);//画像設定 ObjShot_SetDelay(obj,delay);//遅延時間設定 ObjLaser_SetWidth(obj,width);//幅設定 ObjLaser_SetLength(obj,len);//長さ設定 ObjLaser_SetSource(obj,false);//光源を消します while(!Obj_BeDeleted(obj)){ let angle3=(180+angle)-angle2/2;//一辺の角度 let sx=cx+r*cos(angle); let sy=cy+r*sin(angle);//一辺の始まる座標設定 Obj_SetPosition(obj,sx,sy); Obj_SetAngle(obj,angle3); yield; cx+=v*cos(dir); cy+=v*sin(dir);//中心座標の移動 angle+=w;//回転 if(angle>=360){angle-=360;} } }