public PBPointInfo(int stepIndex, PBPointType type, string animInfo, string tipInfo)
 {
     StepIndex = stepIndex;
     PointType = type;
     AnimInfo  = animInfo;
     TipInfo   = tipInfo;
 }
    private static void ProcessKeyframes(XmlNode nodeKeys, List <PPKeyFrameInfo> keyframeInfos, Dictionary <int, PPAnimNodeInfo> animNodeInfos)
    {
        XmlNodeList keyframeNodes = nodeKeys.SelectNodes("keyframe");

        for (int i = 0; i < keyframeNodes.Count; i++)
        {
            XmlNode keyFrameNode = keyframeNodes[i];

            PPKeyFrameInfo keyFrameInfo = new PPKeyFrameInfo();
            keyFrameInfo.index = int.Parse(keyFrameNode.Attributes["index"].Value);

            PBPointInfo pointInfo = null;
            if (keyFrameNode.Attributes["keyPointType"] != null)
            {
                PBPointType pointType = (PBPointType)int.Parse(keyFrameNode.Attributes["keyPointType"].Value);

                string pointInfoStr = null;
                if (pointType != PBPointType.None && keyFrameNode.Attributes["keyPointInfo"] != null)
                {
                    pointInfoStr = keyFrameNode.Attributes["keyPointInfo"].Value;
                }

                string pointTipStr = null;
                if (pointType != PBPointType.None && keyFrameNode.Attributes["keyPointTip"] != null)
                {
                    pointTipStr = keyFrameNode.Attributes["keyPointTip"].Value;
                }

                pointInfo = new PBPointInfo(keyFrameInfo.index, pointType, pointInfoStr, pointTipStr);
            }
            else if (keyFrameNode.Attributes["custom"] != null)
            {
                //兼容旧版本逻辑
                pointInfo = new PBPointInfo(keyFrameInfo.index, PBPointType.GuidePoint, keyFrameNode.Attributes["custom"].Value, null);
            }
            keyFrameInfo.pointInfo = pointInfo;

            ProcessFrameItems(keyFrameNode.SelectNodes("item"), keyFrameInfo, animNodeInfos);
            keyframeInfos.Add(keyFrameInfo);
        }
    }