サンプル集
サンプル集
関数(v0.x系)
n-Way弾
function WayShot01(X,Y,Speed,Angle,Color,Delay,Way,Gap) { // X X座標 // Y Y座標 // Speed 弾速 // Angle 角度 // Color 弾の色 // Delay ディレイ // Way 弾の数 // Gap 弾同士の間隔 値を大きくすると弾が広がって撃たれます。 Angle -= (Way-1)/2*Gap; loop(way) { CreateShot01(X,Y,Speed,Angle,Color,Delay); Angle += Gap; } }
全方位弾
function RoundShot01(X,Y,Speed,Angle,Color,Delay,Way) { // X X座標 // Y Y座標 // Speed 弾速 // Angle 角度 // Color 弾の色 // Delay ディレイ // Way 弾の数 loop(Way) { CreateShot01(X,Y,Speed,Angle,Color,Delay); Angle += 360/Way; } }
線状弾
function LineShot01(X,Y,Speed,Angle,Color,Delay,Way,Speed2,Delay2) { // X X座標 // Y Y座標 // Speed 弾速 // Angle 角度 // Color 弾の色 // Delay ディレイ // Way 弾の数 // Speed2 弾速の差 // Delay2 ディレイの差 loop(Way) { CreateShot01(X,Y,Speed,Angle,Color,Delay); Speed += Speed2; Delay += Delay2; } }
交差弾
function RoundShot04(let x,let y,let speed,let angle,way,let speedp,let speedmax,let anglep,let graphic,let img,let delay) //X,Y,速度、角度、way数、加速度、最高速度、回角度、正方向の画像、逆方向の画像、遅延フレーム数 { let wayAngle = 360 / way; loop( way ){ CreateShotA(1, x, y, delay); SetShotDataA(1,0, speed, angle, anglep,speedp,speedmax, graphic); FireShot(1); CreateShotA(2, x, y, delay); SetShotDataA(2,0, speed, angle, -anglep,speedp,speedmax, img); FireShot(2); angle += wayAngle; } }
変数を画面に表示するときの下処理
function NumToString(let num) { //num 数字 let leng = trunc(log10(num))+1; if(num==0){leng = 0} let string = ToString(num); let str = " "; let zero =ToString(0); times(4-leng) { vstring = str ~ string; } if(num==0) { string = zero~ string; loop(3) { string = str ~ string; } } }
ちょっと便利な数学系関数
オブジェクト弾(v0.x系)
- オブジェクト弾の初期設定 (返り値オブジェクトナンバー 他のはこれを使用済)
オブジェクト弾の初期設定
function ObjShot(X,Y,Speed,Angle,Color,Delay) { // X x座標 // Y y座標 // Speed 弾速 // Angle 角度 // Color 弾の色 // Delay 遅延時間 let obj = Obj_Create(OBJ_SHOT); Obj_SetX(obj,X); Obj_SetY(obj,Y); Obj_SetSpeed(obj,Speed); Obj_SetAngle(obj,Angle); ObjShot_SetGraphic(obj,Color); ObjShot_SetDelay(obj,Delay); return obj; }
一旦停止して、また動き出す弾
task ObjShot01(X,Y,Speed,Angle,Color,Delay,Stop,Stop2,Change,Change2,Speed2,Angle2,Color2) { // X x座標 // Y y座標 // Speed 弾速 // Angle 角度 // Color 弾の色 // Delay ディレイ // Stop 停止し始めるまでの時間 // Stop2 停止し終わるまでの時間 // Change 再起し始めるまでの時間 // Change2 再起し終わるまでの時間 // Speed2 再起後の弾速 // Angle2 再起後の角度 // Color2 再起後の弾の色 let obj = ObjShot(X,Y,Speed,Angle,Color,Delay); loop(Stop + Delay) {yield;} let Acc = Obj_GetSpeed(obj) / (Stop2*2); loop(Stop2) { Obj_SetSpeed(obj,Obj_GetSpeed(obj) - Acc); yield; Obj_SetSpeed(obj,Obj_GetSpeed(obj) - Acc); } if(Stop2 >= 0) { Obj_SetSpeed(obj,0); } loop(Change) {yield;} Obj_SetAngle(obj,Angle2); ObjShot_SetGraphic(obj,Color2); Acc = (Speed2 - Obj_GetSpeed(obj)) / (Change2*2); loop(Change2) { Obj_SetSpeed(obj,Obj_GetSpeed(obj) + Acc); yield; Obj_SetSpeed(obj,Obj_GetSpeed(obj) + Acc); } Obj_SetSpeed(obj,Speed2); }
自由落下弾
task FallShot(x, y, angle, G, Gangle, color, delay) { // x x座標 // y y座標 // angle 角度 // G 加速度 // Gangle 加速度がかかる方向 // color 弾の色 // delay 遅延時間 let obj = ObjShot(x,y,0,angle,color,delay); loop(delay){yield;}; let X= offsetX(speed, angle); let Y= offsetY(speed, angle); while(! Obj_BeDeleted(obj)) { X+=offsetX(G, Gangle); Y+=offsetY(G, Gangle); Obj_SetPosition(obj, Obj_GetX(obj) + X, Obj_GetY(obj) + Y); Obj_SetAngle(obj, atan2(Y, X)); yield; } }
- 反射する弾(下以外)
反射する弾
task ReflectShot(X,Y,Speed,Angle,Color,Delay,Count) { // X x座標 // Y y座標 // Speed 弾速 // Angle 角度 // Color 弾の色 // Delay ディレイ // Count 反射回数 let obj = ObjShot(X,Y,Speed,Angle,Color,Delay); while((!Obj_BeDeleted(obj)) && (Count > 0)) { if((Obj_GetX(obj) < GetClipMinX) | | (Obj_GetX(obj) > GetClipMaxX)) { Obj_SetAngle(obj,180-Obj_GetAngle(obj)); Count--; } else if(Obj_GetY(obj) < GetClipMinY) { Obj_SetAngle(obj,360-Obj_GetAngle(obj)); Count--; } yield; } }
陰陽玉
task OnmyouShot(X,Y,Speed,Angle,Color,Delay,YAdd) { // X X座標 // Y Y座標 // Speed 弾速 // Angle 角度 // Color 弾の色 // Delay ディレイ // YAdd Y加速度 let obj = ObjShot(X,Y,0,rand(0,360),Color,Delay); loop(Delay) {yield;} let XS = Speed*cos(Angle); let YS = Speed*sin(Angle); while(!Obj_BeDeleted(obj)) { if((Obj_GetX(obj) < GetClipMinX) | | (Obj_GetX(obj) > GetClipMaxX)) { XS *= -1; } if(Obj_GetY(obj) < GetClipMinY) { YS *= -1; } YS += YAdd; Obj_SetX(obj,Obj_GetX(obj)+XS); Obj_SetY(obj,Obj_GetY(obj)+YS); yield; } }
不可視弾
task objecthudeshot (X,Y,Speed,Angle,Color,Delay,Alpha){ // X x座標 // Y y座標 // Speed 弾速 // Angle 角度 // Color 弾の色 // Delay ディレイ // Alpha 透明度 0~255で小さいほど透明 // 0だとボム耐性を持ち、当たり判定がなくなる let obj = ObjShot(X,Y,Speed,Angle,Color,Delay); Obj_SetAlpha(obj,Alpha); ObjShot_SetBombResist(obj,!Alpha); Obj_SetCollisionToPlayer(obj,Alpha); }
円運動 Speedを0にして使うこと
function CircularMotion(obj,X,Y,Length,Angle) { //obj 円運動するオブジェクト //X 中心のX座標 //Y 中心のY座標 //Length 中心からの距離 //Angle 中心からの角度 Obj_SetAngle(obj,Angle); Obj_SetX(obj,X+Length*cos(Angle)); Obj_SetY(obj,Y+Length*sin(Angle)); }
オブジェクトレーザー(v0.x系)
- へにょりレーザー
華霊「スワローテイルバタフライ」系のスペルで使われているレーザー
へにょりレーザー
task CreateSinuateLaser(x,y,Angle,Length,Width,Color,radius,frame){ //x X座標 //y Y座標 //Angle 発射角度 //Length レーザーの長さ(30~40程度) //Width レーザーの太さ //Color 弾の色 //radius 広がるサイズ //frame 目的地までの到達時間 let obj = Obj_Create(OBJ_SINUATE_LASER); let t = 0; let x1 = x + cos(Angle)*radius; let y1 = y + sin(Angle)*radius; let x2 = GetPlayerX;//目的地X座標 let y2 = GetPlayerY;//目的地Y座標 let X; let Y; Obj_SetPosition(obj, x, y); Obj_SetSpeed(obj, 0); Obj_SetAngle(obj, Angle); ObjShot_SetGraphic(obj, Color); ObjShot_SetDelay(obj, 0); ObjSinuateLaser_SetLength(obj, Length); ObjSinuateLaser_SetWidth(obj, Width); loop(frame) { X = (t^2*x2+2*t*(1-t)*x1+(1-t)^2*x); Y = (t^2*y2+2*t*(1-t)*y1+(1-t)^2*y); Obj_SetPosition(obj, X, Y); t+=1/frame; yield; } loop(25){yield;} Obj_Delete(obj); }
オブジェクト弾(ph3)
- 反射する弾(全方向,反射時のずれ対応)
反射する弾
task ReflectShot(X,Y,Speed,Angle,Color,Delay,Count) { // X x座標 // Y y座標 // Speed 弾速 // Angle 角度 // Color 弾の色 // Delay ディレイ // Count 反射回数 let obj = CreateShotA1(X, Y, Speed, Angle, Color, Delay); while((!Obj_IsDeleted(obj)) && (Count > 0)) { if(ObjRender_GetX(obj) < 0) { ObjRender_SetX(obj,-ObjRender_GetX(obj)); ObjMove_SetAngle(obj,180-ObjMove_GetAngle(obj)); Count--; } else if(ObjRender_GetX(obj) > GetStgFrameWidth()){ ObjRender_SetX(obj,GetStgFrameWidth()-(ObjRender_GetX(obj)-GetStgFrameWidth())); ObjMove_SetAngle(obj,180-ObjMove_GetAngle(obj)); Count--; } else if(ObjRender_GetY(obj) < 0) { ObjRender_SetY(obj,-ObjRender_GetY(obj)); ObjMove_SetAngle(obj,360-ObjMove_GetAngle(obj)); Count--; } else if(ObjRender_GetY(obj) > GetStgFrameHeight()) { ObjRender_SetY(obj,GetStgFrameHeight()-(ObjRender_GetY(obj)-GetStgFrameHeight())); ObjMove_SetAngle(obj,360-ObjMove_GetAngle(obj)); Count--; } yield; } }
その他
位置指定型の減速する移動
task SmoothMove(X,Y,Time,Time2) { // X x座標 // Y y座標 // Time 等速で移動する時間 // Time2 減速して移動する時間 let Distance = ((Y-GetY)^2+(X-GetX)^2)^0.5; let Speed = Distance/(Time*2+Time2)*2; SetAngle(atan2(Y-GetY,X-GetX)); SetSpeed(Speed); loop(Time) {yield;} loop(Time2) { SetSpeed(GetSpeed-(Speed/(Time2*2))); yield; SetSpeed(GetSpeed-(Speed/(Time2*2))); } SetSpeed(0); }
コメント欄
- 最終更新:2019-06-28 02:28:52