《Genesis-3D开源游戏引擎--横版格斗游戏制作教程06:技能播放的逻辑关系》

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所示。通过键值对,来匹配键入缓存器与技能读表缓存器中的内容,对技能读表缓存器中的连招技能筛选播放最后形成整套连招。

14144929_Fbb5.jpg
图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开源游戏引擎:游戏起源,皆因有我!!!


转载于:https://my.oschina.net/Genesis3D/blog/192874

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值