task Shot_han(let nX, let nY, let nSpeed, let nAngle, let nTime, let nGrf, let nDelay){ //nX:X座標 //nY:Y座標 //nSpeed:発射速度 //nAngle:発射角 //nTime:反射回数 //nGrf:弾画像 //nDelay:ディレイ let obj = Obj_Create(OBJ_SHOT);//弾オブジェクトを作成 Obj_SetPosition(obj,nX,nY);//座標設定 Obj_SetSpeed(obj, nSpeed);//速度設定 Obj_SetAngle(obj, nAngle);//移動角度設定 ObjShot_SetGraphic(obj, nGrf);//画像設定 ObjShot_SetDelay(obj, nDelay);//遅延時間設定 let XML=nSpeed*cos(nAngle);//1フレームに移動するX量 let YML=nSpeed*sin(nAngle);//1フレームに移動するY量 while( !Obj_BeDeleted(obj) ){ //いらない反射分はブロック毎に削除してね。 if(Obj_GetY(obj)<=GetClipMinY){//上端反射 Obj_SetSpeed(obj,0);Obj_SetAngle(obj,-Obj_GetAngle(obj)); Obj_SetY(obj,YML+(GetClipMinY*2-Obj_GetY(obj))); yield;Obj_SetSpeed(obj,nSpeed);nTime--;if(nTime==0){break;}} if(Obj_GetX(obj)<=GetClipMinX){//左端反射 Obj_SetSpeed(obj,0);Obj_SetAngle(obj,180-Obj_GetAngle(obj)); Obj_SetX(obj,XML+(GetClipMinX*2-Obj_GetX(obj))); yield;Obj_SetSpeed(obj,nSpeed);nTime--;if(nTime==0){break;}} if(Obj_GetX(obj)>=GetClipMaxX){//右端反射 Obj_SetSpeed(obj,0);Obj_SetAngle(obj,180-Obj_GetAngle(obj)); Obj_SetX(obj,XML+(GetClipMaxX*2-Obj_GetX(obj))); yield;Obj_SetSpeed(obj,nSpeed);nTime--;if(nTime==0){break;}} if(Obj_GetY(obj)>=GetClipMaxY){//下端反射 Obj_SetSpeed(obj,0);Obj_SetAngle(obj,-Obj_GetAngle(obj)); Obj_SetY(obj,YML+(GetClipMaxY*2-Obj_GetY(obj))); yield;Obj_SetSpeed(obj,nSpeed);nTime--;if(nTime==0){break;}} yield; } }