#東方弾幕風 #Title[残機表示サンプル] #Text[弾幕風v2の適当なフォルダに放り込んで再生してください] #BackGround[Default] #Player[FREE] #ScriptVersion[2] script_enemy_main { let count=0; let cx=GetCenterX();//STGシーンの中心x座標を取得; let imgExRumia="script\img\ExRumia.png"; @Initialize { //SetScore(30000);//スペルカードボーナスを30000に設定 SetLife(300);//ライフを300に設定 SetDamageRate(10,10);//披ダメージを10%に設定 // SetTimer(60);//時間制限を60秒に設定 SetGraphicRect(1,1,64,64);//描画元矩形を設定 SetInvincibility(30);//敵を30フレーム無敵にする LoadGraphic(imgExRumia);//画像「img\ExRumia.png」を読みこむ SetMovePosition02(cx,60,60);//座標(cx,60)へ60フレームかけて移動する Concentration01(150); //CutIn(YOUMU,"星符「ミッドナイトレヴァリエ」",0,0,0,0,0);//スペルカード名表示 Zanki; //残機表示タスク ShotA; //自殺用の単発弾 当たってみて動作確認してください T1up; //動作確認用の1up大盤振る舞い } @MainLoop { yield; } task Zanki{ //残機表示タスク let maxPlayer = 8; //表示させたい最大プレイヤー数 let originX = 430; //残機を表示する座標 let originY = 300; //残機を表示する座標 let add_x = 32; //残機が増えるとこの値分だけ横にずれて表示される let size_x = 32; //残機表示の大きさ let size_y = 32; //残機表示の大きさ let obj = []; ascent(let i in 0..maxPlayer){ obj = obj ~ [Obj_Create(OBJ_EFFECT)]; ObjEffect_SetTexture(obj[i], "script\img\ExRumia.png");//仮のテクスチャ これを残機画像に差し替える ObjEffect_SetLayer(obj[i], 8); //外枠に表示 //以下、エフェクト設定 ObjEffect_SetPrimitiveType(obj[i],PRIMITIVE_TRIANGLESTRIP); ObjEffect_CreateVertex(obj[i], 4); ObjEffect_SetVertexXY(obj[i], 0, -size_x/2, -size_y/2); ObjEffect_SetVertexXY(obj[i], 1, -size_x/2, size_y/2); ObjEffect_SetVertexXY(obj[i], 2, size_x/2, -size_y/2); ObjEffect_SetVertexXY(obj[i], 3, size_x/2, size_y/2); ObjEffect_SetVertexUV(obj[i], 0, 0, 0); ObjEffect_SetVertexUV(obj[i], 1, 0, 64); ObjEffect_SetVertexUV(obj[i], 2, 64, 0); ObjEffect_SetVertexUV(obj[i], 3, 64, 64); //設定ここまで //現在のライフの数だけ画像を表示 多い分はアルファ値を0に設定 if(GetPlayerLife<(i+2)){ ObjEffect_SetVertexColor(obj[i],0,0,255,255,255); ObjEffect_SetVertexColor(obj[i],1,0,255,255,255); ObjEffect_SetVertexColor(obj[i],2,0,255,255,255); ObjEffect_SetVertexColor(obj[i],3,0,255,255,255); }else{ ObjEffect_SetVertexColor(obj[i],0,255,255,255,255); ObjEffect_SetVertexColor(obj[i],1,255,255,255,255); ObjEffect_SetVertexColor(obj[i],2,255,255,255,255); ObjEffect_SetVertexColor(obj[i],3,255,255,255,255); } Obj_SetPosition(obj[i], originX+add_x*i, originY); } //現在のライフを記憶 let current_life = GetPlayerLife; loop{ //ライフが変動するまで待つ while(current_life==GetPlayerLife){yield;} //再度、現在のライフの数だけ画像を表示 ascent(let i in 0..maxPlayer){ if(GetPlayerLife<(i+2)){ ObjEffect_SetVertexColor(obj[i],0,0,255,255,255); ObjEffect_SetVertexColor(obj[i],1,0,255,255,255); ObjEffect_SetVertexColor(obj[i],2,0,255,255,255); ObjEffect_SetVertexColor(obj[i],3,0,255,255,255); }else{ ObjEffect_SetVertexColor(obj[i],0,255,255,255,255); ObjEffect_SetVertexColor(obj[i],1,255,255,255,255); ObjEffect_SetVertexColor(obj[i],2,255,255,255,255); ObjEffect_SetVertexColor(obj[i],3,255,255,255,255); } } //新しく現在のライフを記憶 current_life=GetPlayerLife; yield; } } task ShotA{ loop{ CreateShot01(GetX, GetY, 3,90,BLUE01,1); loop(30){yield;} } } task T1up{ loop{ CreateItem(ITEM_1UP,GetX+30,GetY); loop(300){yield;} } } @Finalize {//読みこんだファイルを削除 DeleteGraphic(imgExRumia); } @DrawLoop { //Exルーミア描画 if(count<270){SetGraphicRect(64,64,127,127)}; if(count>=270){SetGraphicRect(1,1,64,64);} SetAlpha(255); SetTexture(imgExRumia); DrawGraphic(GetX(),GetY()); } }