#東方弾幕風 #Title[テストスクリプト] #Text[ ] #BackGround[User("script\CF_SZI\back.png,0,0)] #Image[] #ScriptVersion[2] script_enemy_main { let count=0; let count2=0; let count3=0; let speed; let angle=0; let angle2=0; let angle3=0; let test=0; let cx; let a =0; let b =0; let c =0; let testimg="script\CF_SZI\reimu.png"; let sd="script\CF_SZI\ShotData2.txt"; let teki="script\img\ExRumia.png"; @Initialize { count=0; cx=GetCenterX(); SetTimer(60); SetLife(340); SetScore(500); SetDamageRate(10,10); SetGraphicRect(64,1,127,64);//描画元の矩形を(64,1)-(127,64)に設定 LoadGraphic(teki);//script\img\ExRumia.jpgをテクスチャに読みこみ LoadGraphic("script\CF_SZI\reimu.png");//script\img\ExRumia.jpgをテクスチャに読みこみ SetMovePosition02(cx,150,60);//座標(cx,60)に60フレームで移動 SetInvincibility(30);//敵を30フレーム無敵にする // CutIn(YOUMU,"test","script\CF_SZI\Cutin.png",0,0,297,442); } @MainLoop { if(count%10==0){loop(5){ReflectShot(GetX,GetY,2,angle,1,true,true,true,false,RED21,10);angle+=70;}angle+=3;} if(count==90){SetMovePositionRandom01(10,10,10,100,80,400,150);} if(count==100){count=60;} SetCollisionA(GetX(),GetY(),32);//敵の座標に当たり判定を登録 SetCollisionB(GetX(),GetY(),24);//敵の座標に当たり判定(体当たり用)を登録 count++;//1フレーム毎にcountが1増加 count2++; } @DrawLoop { SetTexture(teki);//描画元テクスチャを設定 DrawGraphic(GetX(),GetY());//敵の座標にExルーミアを描画; } @Finalize { DeleteGraphic(teki);//読みこんだテクスチャを破棄 loop(30){CreateItem(ITEM_SCORE,GetX + rand(1,100) -50,GetY + rand(1,-100) +100)}; } function ReflectShot( let x, // 弾源x座標 let y, // 弾源y座標 let speed, // 速度 let angle, // 角度 let reflectNum, // 反射回数 let reflectL, // 画面左端で反射 true/false let reflectU, // 画面上端で反射 true/false let reflectR, // 画面右端で反射 true/false let reflectD, // 画面下端で反射 true/false let graphic, // 画像 let delay // 遅延フレーム数 ){ let minX = GetClipMinX(); let maxX = GetClipMaxX(); let minY = GetClipMinY(); let maxY = GetClipMaxY(); let totalFrame = 0; CreateShotA( 0, x, y, delay ); SetShotDataA( 0, 0, speed, angle, 0, 0, 0, graphic ); while( reflectNum >= 1 ){ while( angle < 0 ){ angle += 360; } if( angle >= 360 ){ angle %= 360; } let angleLU = atan2( y - minY, x - minX ) + 180; let angleRU = atan2( y - minY, x - maxX ) + 180; let angleLD = atan2( y - maxY, x - minX ) + 180; let angleRD = atan2( y - maxY, x - maxX ) + 180; if( angleRU == 0 ){ angleRU = 360; } if( angleRD == 360 ){ angleRD = 0; } let reflectLength = 0; let reflectX = 0; let reflectY = 0; let reflectAngle = 0; let reflect = false; if( angle >= angleRU || angle < angleRD ){ reflectLength = ( maxX - x ) / cos( angle ); reflectX = maxX; reflectY = y + reflectLength * sin( angle ); reflectAngle = 180 - angle; reflect = reflectR; } else if( angle >= angleLD && angle < angleLU ){ reflectLength = ( minX - x ) / cos( angle ); reflectX = minX; reflectY = y + reflectLength * sin( angle ); reflectAngle = 180 - angle; reflect = reflectL; } else if( angle >= angleLU && angle < angleRU ){ reflectLength = ( minY - y ) / sin( angle ); reflectX = x + reflectLength * cos( angle ); reflectY = minY; reflectAngle = - angle; reflect = reflectU; } else{ reflectLength = ( maxY - y ) / sin( angle ); reflectX = x + reflectLength * cos( angle ); reflectY = maxY; reflectAngle = - angle; reflect = reflectD; } if( !reflect ){ break; } x = reflectX; y = reflectY; angle = reflectAngle; totalFrame += reflectLength / speed; SetShotDataA( 0, totalFrame, NULL, angle, 0, 0, 0, graphic ); reflectNum --; } FireShot( 0 ); } @BackGround{ SetTexture("script\CF_SZI\reimu.png"); SetGraphicRect(0,0,216,400);//描画元の矩形を(64,1)-(127,64)に設定 DrawGraphic(250,60); } }