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 nMinX = GetClipMinX(); let nMaxX = GetClipMaxX(); let nMinY = GetClipMinY(); let nMaxY = GetClipMaxY(); while( !Obj_BeDeleted( obj ) ){ // 左端反射(不要ならif末まで削除) if( Obj_GetX( obj ) < nMinX ){ Obj_SetAngle( obj, 180 - Obj_GetAngle( obj ) ); Obj_SetX( obj, nMinX + nMinX - Obj_GetX( obj ) ); nTime --; if( nTime == 0 ){ break; } } // 右端反射(不要ならif末まで削除) if( Obj_GetX( obj ) > nMaxX ){ Obj_SetAngle( obj, 180 - Obj_GetAngle( obj ) ); Obj_SetX( obj, nMaxX - ( Obj_GetX( obj ) - nMaxX ) ); nTime --; if( nTime == 0 ){ break; } } // 上端反射(不要ならif末まで削除) if( Obj_GetY( obj ) < nMinY ){ Obj_SetAngle( obj, - Obj_GetAngle( obj ) ); Obj_SetY( obj, nMinY + nMinY - Obj_GetY( obj ) ); nTime --; if( nTime == 0 ){ break; } } // 下端反射(不要ならif末まで削除) if( Obj_GetY( obj ) > nMaxY ){ Obj_SetAngle( obj, - Obj_GetAngle( obj ) ); Obj_SetY( obj, nMaxY - ( Obj_GetY( obj ) - nMaxY ) ); nTime --; if( nTime == 0 ){ break; } } yield; } }