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>();//匹配当前按键的连招集合
2 </uint32></uint32>
进行匹配操作,即逻辑关系处理。原理图如6-3-1所示。通过键值对,来匹配键入缓存器与技能读表缓存器中的内容,对技能读表缓存器中的连招技能筛选播放最后形成整套连招。
图6-3-1
01 public void SkillComboAni()
02 {
03 //第一招
04 if (string.IsNullOrEmpty(PlayingSkillAnimationName))
05 {
06 if (0 == m_vInputKeyboards.Count) return;
07 //将全部连招技能缓存到匹配连招容器
08 foreach (KeyValuePair< UInt32, ContinualSkillData> pair inContinualSkillConfig.Instance.ContinualSkillDataDictionary)
09 {
10 m_vMatchContinualSkill.Add(pair.Key);
11 }
12 if (!AddCurrentKeyboardIndex())
13 {
14 throw (new ArgumentException("Player.SkillComboAni0"));
15 }
16 ProcessMatchContinualSkill();
17 SkillData skillData = GetCurrentSkillData();
18 if (null == skillData)
19 {
20 throw (new ArgumentException("Player.SkillComboAni1"));
21 }
22 PlayAnimation(skillData, true);
23 }
24 else
25 {
26 if (!ViewMgr.Instance.CurPlayerView.IsSkillAnimationPlaying(PlayingSkillAnimationName))
27 {
28 SkillData skillData = GetCurrentSkillData();
29 if (null == skillData)
30 {
31 throw (new ArgumentException("Player.SkillComboAni2"));
32 }
33 //起招播放完成
34 if (PlayingSkillAnimationName == skillData.SkillAnimation)
35 {
36 StopAnimation(skillData.SkillAnimation, true);
37 //连招按键缓存读取完成
38 if (!AddCurrentKeyboardIndex())
39 {
40 PlayAnimation(skillData, false);
41 }
42 else
43 {
44 //没有匹配到连招,播放收招,并且回退当前正在处理的按键索引到前一个
45 if (!IsMatchContinualSkill())
46 {
47 PlayAnimation(skillData, false);
48 SubCurrentKeyboardIndex();
49 }
50 else
51 //播放匹配到的连招
52 {
53 ProcessMatchContinualSkill();
54 SkillData skillData2 = GetCurrentSkillData();
55 if (null == skillData2)
56 {
57 throw (new ArgumentException("Player.SkillComboAni3"));
58 }
59
60 PlayAnimation(skillData2, true);
61 }
62 }
63 }
64 //收招播放完成
65 else if (PlayingSkillAnimationName == skillData.SkillEndAnimation)
66 {
67 StopAnimation(PlayingSkillAnimationName, false);
68 SetAttackIdle();
69 ResetSkill();
70 }
71 }
72 }
73 }
引擎官方网站:http://www.genesis-3d.com.cn/
官方论坛:http://bbs.9tech.cn/genesis-3d/
官方千人大群:59113309 135439306
YY频道-游戏开发大讲堂(完全免费,定期开课):51735288
Genesis-3D开源游戏引擎:游戏起源,皆因有我!!!