#東方弾幕風 #Title[課題提出w] #Text[こんな感じでしょうか?] #Image[] #BackGround[User()] #BGM[] #Player[FREE] #ScriptVersion[2] script_enemy_main { let bossimg="script\img\ExRumia.png"; let aGR=[0,0,64,64]; //タスク集 ここから------------------------------------------------------------ task mainTask() { collisionSet(); //当り判定の登録。 gpSet(); //画像表示処理の登録。 SetMovePosition03(GetCenterX(),150,10,8); //初期位置への移動 loop(120) {yield;} danmaku01(); //弾幕登録。必要によって増やす。 } task collisionSet() { while(1) { SetCollisionA(GetX(),GetY(),16); SetCollisionB(GetX(),GetY(),24); yield; } } task gpSet() { } // 関数:randList // 0から与えられた数字までをランダムに並び替えた配列を返す関数。 // 同じ数字が出ないランダムを使いたいときに。 function randList(let a) { if(a<=0) {return;}// 個数が0以下の場合は何もせずに終了〜。エラー出すのめんど(ry // 拾う数字の一覧を作ってみる let tm=[]; let tm2=0; let list=[]; ascent(let cnt in 0..a) { tm=tm~[cnt]; list=list~[0]; } ascent(let cnt in 0..a) { tm2=rand_int(0,a-(cnt+1)); list[cnt]=tm[tm2]; tm[tm2]=tm[a-cnt-1]; } return list } task danmaku01() { let count=0; let listA; let listL; let listS; while(1) { if(count%360==0) {listA=randList(360);} if(count%61==0) {listL=randList(61);} if(count%10==0) {listS=randList(10);} let ang=listA[count%360]; let len=60+listL[count%61]; let spd=2+listS[count%10]/2; let x=GetX()+cos(ang)*len; let y=GetY()+sin(ang)*len; let ang2=atan2(GetPlayerY()-y,GetPlayerX()-x); CreateShot01(x,y,spd,ang2,WHITE21(),20); count++; loop(1+(count%60==0)*30) {yield;} } } //タスク集 ここまで------------------------------------------------------------ @Initialize() { SetScore(100000); //スペカアタック時にオン。それ以外はコメントアウト SetDamageRate(100,100); //ダメージ率設定。 SetInvincibility(120); //無敵時間設定。敵の動き出しにあわせて2秒に設定。 SetLife(4000); SetTimer(60); LoadGraphic(bossimg); SetTexture(bossimg); SetX(GetCenterX()); //初期位置Xを設定。 SetY(-100); //初期位置Yを設定。 mainTask(); //メインタスクを起動。 } //ほぼ空気扱い @MainLoop() { yield; } @DrawLoop() { SetGraphicRect(aGR[0],aGR[1],aGR[2],aGR[3]); DrawGraphic(GetX(),GetY()); } @Finalize() { DeleteGraphic(bossimg); } //必要な分だけインクルードする } //script_enemy_main