テンプレート
初心者のうちはこれをベースに作るといいでしょう
v0.x 系用
#東方弾幕風 #Title[無符「テンプレート」] #Text[] #Player[FREE] #ScriptVersion[2] script_enemy_main { let level = 5; //難易度を整数で設定してください 大きいほうが難しい(はず)です let Name = "無符「テンプレート」"; //この弾幕の名前を設定してください 必ず「"」で囲んでください let imgBoss = "script\img\ExRumia.png"; //ボスの画像を設定できます 必ず「"」で囲んでください let BossX = GetCenterX; //登場位置のXを設定できます let BossY = GetClipMinY+120; //登場位置のYを設定できます let Score = 3000000; //取得時の基本点を入れてください 通常弾は0にしてください 基本7桁です let Timer = 40; //制限時間を設定してください 耐久にする場合はマイナスにして書いてください @Initialize { SetLife(2000); LoadGraphic(imgBoss); SetTexture(imgBoss); SetGraphicRect(0,0,64,64); SetEnemyMarker(true); if(Score>0) { SetScore(Score); CutIn(YOUMU,Name,"",0,0,0,0); } if(Timer>0) { SetTimer(Timer); } else if(Timer<0) { SetTimer(-Timer); SetDurableSpellCard; SetDamageRate(0,0); } StartTask; } @MainLoop { SetCollisionA(GetX,GetY,24); SetCollisionB(GetX,GetY,24); yield; } @DrawLoop { if(GetSpeed < 0.1) { SetGraphicRect(0,0,64,64); } else if(cos(GetAngle) < 0) { SetGraphicRect(128,0,192,64); } else { SetGraphicRect(192,0,256,64); } DrawGraphic(GetX,GetY); } @Finalize { DeleteGraphic(imgBoss); } //--------------------ここから-------------------- task StartTask { //弾幕を打ち始めるまでのタスクです SmoothMove(BossX,BossY,20,40); SetInvincibility(90); loop(90) {yield;} MainTask; } task MainTask { //メインのタスクです loop(3) { loop(level) { CreateShot01(GetX,GetY,3,GetAngleToPlayer,RED01,0); loop(10) {yield;} } loop(30) {yield;} } MoveTask; } task MoveTask { //ボスが動くときのタスクです let Move = rand(70,90); Move = Move*Qif(GetX<=GetPlayerX,Qif(GetX+Move<416,1,-1),Qif(GetX-Move>32,-1,1)); SmoothMove(GetX+Move,rand(BossY-40,BossY+40),20,40); loop(60) {yield;} MainTask; } //--------------------ここまで-------------------- task SmoothMove(X,Y,Time,Time2) { //減速してスムーズに移動するタスクです //SmoothMove(X位置,Y位置,等速,移動時間,減速移動時間); 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); } task ObjShot01(X,Y,Speed,Angle,Color,Delay,Stop,Stop2,Change,Change2,Speed2,Angle2,Color2) { //一旦停止して動き出すオブジェクトショット用タスクです 停止終了が-だと減速しません //ObjShot01(X位置,Y位置,速度,角度,色,延長,停止開始,停止終了,再起開始,再起終了,再速度,再角度,再色); 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); } function ObjShot(X,Y,Speed,Angle,Color,Delay) { //オブジェクトショットを一行で作ります。 //ObjShot(X位置,Y位置,速度,角度,色,延長); 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; } function LineShot01(X,Y,Speed,Angle,Color,Delay,Way,Speed2,Delay2) { //弾を直線に打つ関数です いわゆる線状弾です //LineShot01(X位置,Y位置,速度,中心角度,色,延長,数,速度差,延長差); loop(Way) { CreateShot01(X,Y,Speed,Angle,Color,Delay); Speed += Speed2; Delay += Delay2; } } function WayShot01(X,Y,Speed,Angle,Color,Delay,Way,Gap) { //弾を複数の方向に打つ関数です いわゆるWay弾です //WayShot01(X位置,Y位置,速度,中心角度,色,延長,数,弾と弾の間); 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) { //弾を全方向に打つ関数です いわゆる全方位弾です //RoundShot01(X位置,Y位置,速度,中心角度,色,延長,数); loop(Way) { CreateShot01(X,Y,Speed,Angle,Color,Delay); Angle += 360/Way; } } function Qif(Quest,YesR,NoR) { //条件の真偽で返り値を変化させる関数です //Qif(条件,真の返り値,偽の返り値); if(Quest) { return(YesR) } else { return(NoR) } } }
- 最終更新:2018-05-13 06:47:24