6.技能播放的逻辑关系
技能播放概述:
当完成对技能输入与检测之后,程序就该对输入在缓存器中的按键操作与程序读取的技能表信息进行匹配,根据匹配结果播放相应的连招技能。
技能播放原理:
按键缓存器中内容与技能系统缓存中的内容,进行匹配,匹配成功即播放相应连招技能动画。
图1
实现方法:
步骤1:
按键缓存。
1 | private Dictionary < UInt32, Code> m_vInputKeyboards = new Dictionary < UInt32, Code>(); |
2 | private UInt32 m_iCurrentKeyboardIndex = 0; |
步骤2:
技能系统缓存。
1 | private List<uint32> m_vMatchContinualSkill = new List<uint32>(); |
步骤3:
进行匹配操作,即逻辑关系处理。原理图如6-3-1所示。通过键值对,来匹配键入缓存器与技能读表缓存器中的内容,对技能读表缓存器中的连招技能筛选播放最后形成整套连招。
图6-3-1
01 | public void SkillComboAni() |
04 | if ( string .IsNullOrEmpty(PlayingSkillAnimationName)) |
06 | if (0 == m_vInputKeyboards.Count) return ; |
08 | foreach (KeyValuePair< UInt32, ContinualSkillData> pair in ContinualSkillConfig.Instance.ContinualSkillDataDictionary) |
10 | m_vMatchContinualSkill.Add(pair.Key); |
12 | if (!AddCurrentKeyboardIndex()) |
14 | throw ( new ArgumentException( "Player.SkillComboAni0" )); |
16 | ProcessMatchContinualSkill(); |
17 | SkillData skillData = GetCurrentSkillData(); |
18 | if ( null == skillData) |
20 | throw ( new ArgumentException( "Player.SkillComboAni1" )); |
22 | PlayAnimation(skillData, true ); |
26 | if (!ViewMgr.Instance.CurPlayerView.IsSkillAnimationPlaying(PlayingSkillAnimationName)) |
28 | SkillData skillData = GetCurrentSkillData(); |
29 | if ( null == skillData) |
31 | throw ( new ArgumentException( "Player.SkillComboAni2" )); |
34 | if (PlayingSkillAnimationName == skillData.SkillAnimation) |
36 | StopAnimation(skillData.SkillAnimation, true ); |
38 | if (!AddCurrentKeyboardIndex()) |
40 | PlayAnimation(skillData, false ); |
45 | if (!IsMatchContinualSkill()) |
47 | PlayAnimation(skillData, false ); |
48 | SubCurrentKeyboardIndex(); |
53 | ProcessMatchContinualSkill(); |
54 | SkillData skillData2 = GetCurrentSkillData(); |
55 | if ( null == skillData2) |
57 | throw ( new ArgumentException( "Player.SkillComboAni3" )); |
60 | PlayAnimation(skillData2, true ); |
65 | else if (PlayingSkillAnimationName == skillData.SkillEndAnimation) |
67 | StopAnimation(PlayingSkillAnimationName, false ); |