Exemple #1
0
    private void CollidedByObject(IAffectedMovableObject affectedObject)
    {
        int curTime = STGStageManager.GetInstance().GetFrameSinceStageStart();
        GravitationParas paras;

        if (_affectedObjectDic.TryGetValue(affectedObject, out paras))
        {
            if (curTime - paras.lastUpdateTime == 1)
            {
                // 每帧重新计算向心力、离心力的角度
                if (_fieldType == GravitationType.Centripetal)
                {
                    paras.vAngle   = MathUtil.GetAngleBetweenXAxis(_curPos - affectedObject.GetPosition());
                    paras.accAngle = paras.vAngle;
                }
                else if (_fieldType == GravitationType.Centrifugal)
                {
                    paras.vAngle   = MathUtil.GetAngleBetweenXAxis(affectedObject.GetPosition() - _curPos);
                    paras.accAngle = paras.vAngle;
                }
                paras.timeInGravitationField++;
            }
            else
            {
                paras = CreateGravitationParas(affectedObject);
                paras.timeInGravitationField = 1;
            }
        }
        else
        {
            paras = CreateGravitationParas(affectedObject);
            paras.timeInGravitationField = 1;
        }
        paras.lastUpdateTime = curTime;
        _affectedObjectDic[affectedObject] = paras;
        // 设置额外运动参数
        affectedObject.AddExtraSpeedParas(paras.velocity, paras.vAngle, paras.acce * paras.timeInGravitationField, paras.accAngle);
    }