    //ܒe̐EǗB
    //gpO[oϐFListPrismLasers, x0Prisms, y0Prisms, ReviseShotAngle, NumberTopOfPolygon
    //ݒO[oϐFȂ

    //ܒe̐B邾B
    //ϐFe򔭎ˊԊuAeAOOtBbNAOtBbN(7)A܌vZϐQ
    task TCreateRefractedShot(ShotTime, v, ImgBe, ImgsAf, CalcRefraction)	
    {
        let nTop = NumberTopOfPolygon;	//vY_

        let n = length(ListPrismLasers) / nTop;
        loop
        {
            ascent(i in 0..n)
            {
                let Ang0 = atan2( y0Prisms[i] - GetY, x0Prisms[i] - GetX);	//p
                let Ang1 = ReviseShotAngle[i];		//␳p
                let Ang = Ang0 + Ang1;		//ۂ̑_px
                TBeforeSpectrum(v, Ang, ImgBe, ImgsAf, CalcRefraction);
            }
            wait(ShotTime);
        }
    }


    //ܒẻ^pBO܂ŊǊ
    //ϐFeAˊpxAOOtBbNAOtBbN(7)A܌vZϐQ
    task TBeforeSpectrum(v, Ang, ImgBe, ImgsAf, CalcRefraction)
    {
        //{
        let obj = Obj_Create(OBJ_SHOT);
        Obj_SetX(obj, GetX);
        Obj_SetY(obj, GetY);
        Obj_SetSpeed(obj, v);
        Obj_SetAngle(obj, Ang);
        ObjShot_SetGraphic(obj, ImgBe);

        while( !Obj_BeDeleted(obj) )	//obj炨I
        {
            //SẴvY[U[ƐڐG
            ascent( i in 0..length(ListPrismLasers) )
            {
                if (Collision_Obj_Obj(ListPrismLasers[i], obj) )
                {
                    let X = [Obj_GetX(obj), Obj_GetY(obj)];
                    ascent(j in 0..7)			//I
                    {
                        TAfterSpectrum(j, i, X, v, Ang, ImgsAf, CalcRefraction);
                    }
                Obj_Delete(obj);
                }
            }
            yield;
        }
    }


    //ܒẻ^pBƓɋܒéÅǊɓB
    //ϐFFIDAڐGvY[U[IDAڐGWAxAڐGpxAFXgA܌vZϐQ
    task TAfterSpectrum(ColorID, PrismID, X, v, Ang, ImgsAf, CalcRefraction)
    {
        let Img = ImgsAf[ColorID];

        //ϐ̉
        let IndexGreen = CalcRefraction[0];	//΂̋ܗ(KX1.52)
        let IndexDiff = CalcRefraction[1];	//ܗ̍
        let time = CalcRefraction[2];	//dJEgh~
        let MaxSinr = CalcRefraction[3];	// |sin(r)| ̏B(rF܊p)𒴂ƑS

        let Index = IndexGreen + IndexDiff * (ColorID - 4);	//ܗ̊m

        //objb
        let obj = Obj_Create(OBJ_SHOT);
        Obj_SetPosition(obj, X[0], X[1]);
        Obj_SetSpeed(obj, v);
        ObjShot_SetGraphic(obj, Img);

        //܊pvZ
        let AngP = Obj_GetAngle(ListPrismLasers[PrismID]);		//vY[U[̊px
        let way = Ang360(Ang - AngP) > 0;			//vYɐNHEoH
        Ang = RefractAngle(Ang, AngP, Index, way, MaxSinr);	//܌p̌vZ

        Obj_SetAngle(obj, Ang);			//`

        wait(time);				//ܖh~

        while( !Obj_BeDeleted(obj) )
        {
            //SẴvY[U[ƐڐG
            ascent( i in 0..length(ListPrismLasers) )
            {
                if (Collision_Obj_Obj(ListPrismLasers[i], obj) )
                {
                //܊pvZ
                AngP = Obj_GetAngle(ListPrismLasers[i]);	//vY[U[̊px
                way = Ang360(Ang - AngP) > 0;	//vYɐNHEoH
                Ang = RefractAngle(Ang, AngP, Index, way, MaxSinr);	//܌p̌vZ

                Obj_SetAngle(obj, Ang);		//`
                wait(time);				//ܖh~
                }
            }
            yield;				//[vh~
        }
    }