开发框架——横版格斗——6.技能播放的逻辑关系

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>

步骤3:

进行匹配操作,即逻辑关系处理。原理图如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 }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值