技能讀表,做爲實現技能系統更爲快捷的一種方式,被普遍應用到遊戲開發中。技能配表,做爲橋樑鏈接着遊戲策劃者和開發者在技能實現上的關係。在遊戲技能開發中,開發者只須要根據策劃人員提供的技能配表,在程序上實現對配置文件的讀取功能。策劃人員在遊戲開發後期,若是在技能策劃上作了修改,能夠經過對技能配表的修改來實現對技能系統的修改。在這一過程當中,繞過了開發者,便於策劃對遊戲後期開發的掌控,減輕了程序員的工做量。能夠說技能讀表不只對技能、技能連招作出了貢獻,也減輕了整個開發團隊的工做量。 程序員
策劃提供技能配表,開發人員需根據技能配表實現程序對配置文件的讀取工做,玩家下達相應命令時,遊戲角色執行相應技能,流程圖如5-1所示。 c#
圖5-1 數據結構
步驟1: 動畫
策劃人員製做技能配表,至少包括技能配置表格和連招技能配置表格兩張表,表格格式一般採用INI、TXT、CSV等,這裏推薦開發者使用CSV,方便操做看着清晰。配置好的表格如Skill.csv和ContinualSkill.csv文件所示。 網站
步驟2: spa
開發人員根據提供的技能配置文件,程序上實現對配置文件的讀取功能。具體實現方式以下所示。 3d
2.1:定義讀取技能表後,記錄技能表後,存放信息位置。 code
1)在類SkillData中,用數據結構用來記錄表的信息,參考技能配置表Skill。 索引
01 private UInt32 m_iSkillID; //技能標示符 02 private Code m_eSkillKeyboard; //技能按鍵 03 private string m_sSkillAnimation; //技能動畫 04 private Int32 m_iSkillDamageHp; //技能傷害值 05 private string m_sSkillEffect; //技能特效 06 private UInt32 m_iBeginKeyFrame; //從哪一幀開始接收玩家按鍵 07 private UInt32 m_iEndKeyFrame; //截止哪一幀中止接收玩家按鍵 08 private UInt32 m_iBeginHurtFrame; //從哪一幀開始有效碰撞傷害 09 private UInt32 m_iEndHurtFrame; //截止哪一幀中止有效碰撞傷害 10 private UInt32 m_iEndID; //收招標示符 11 private string m_sEndAnimation; //收招動畫
1 private UInt32 m_iContinualSkillID; //連續技能標示符 2 private Dictionary < UInt32, SkillData > m_vSkillData; //連招包含的技能< 招數索引,該招技能>
1 private Dictionary < UInt32, ContinualSkillData> m_vContinualSkills;//連招技能容器<連招技能標示符,連招技能數據>
2.2技能信息的讀取過程 接口
1)加載技能配置數據
01 private void LoadSkillConfig() 02 { 03 StreamReader streamRead=new StreamReader(GenerateSkillFilePath(), System.Text.Encoding.Default); 04 string sLine = streamRead.ReadLine(); 05 string[] aryLine; 06 while (null != (sLine = streamRead.ReadLine())) 07 { 08 aryLine = sLine.Split(new char[] { '\t' }); 09 if (COLUMN_PER_SKILL > aryLine.Length) continue; 10 11 UInt32 iSkillID = UInt32.Parse(aryLine[0]); 12 Code eSkillKeyboard = (Code)int.Parse(aryLine[1]); 13 string sSkillAnimation = aryLine[2]; 14 Int32 iSkillDamageHp = Int32.Parse(aryLine[3]); 15 string sSkillEffect = aryLine[4]; 16 UInt32 iBeginKeyFrame = UInt32.Parse(aryLine[5]); 17 UInt32 iEndKeyFrame = UInt32.Parse(aryLine[6]); 18 UInt32 iBeginHurtFrame = UInt32.Parse(aryLine[7]); 19 UInt32 iEndHurtFrame = UInt32.Parse(aryLine[8]); 20 UInt32 iEndID = UInt32.Parse(aryLine[9]); 21 string sEndAnimation = aryLine[10]; 22 23 if (iBeginKeyFrame >= iEndKeyFrame || iBeginHurtFrame >= iEndHurtFrame) 24 { 25 throw (new ArgumentException("ContinualSkillConfig.LoadSkillConfig")); 26 } 27 28 SkillData skillData = new SkillData(iSkillID, eSkillKeyboard, sSkillAnimation, iSkillDamageHp, sSkillEffect, iBeginKeyFrame, iEndKeyFrame, iBeginHurtFrame, iEndHurtFrame, iEndID, sEndAnimation); 29 m_vSkills.Add(iSkillID, skillData); 30 } 31 streamRead.Close(); 32 }
01 private void LoadContinualSkillConfig() 02 { 03 StreamReader streamRead = new StreamReader(GenerateContinualSkillFilePath(), System.Text.Encoding.Default); 04 string sLine = streamRead.ReadLine(); 05 string[] aryLine; 06 while (null != (sLine = streamRead.ReadLine())) 07 { 08 aryLine = sLine.Split(new char[] { '\t' }); 09 int iColumnNum = aryLine.Length; 10 if (1 >= iColumnNum) continue; 11 12 UInt32 iContinualSkillID = UInt32.Parse(aryLine[0]); 13 ContinualSkillData continualSkill = GetContinualSkillData(iContinualSkillID); 14 15 for (int ii = 1; ii < iColumnNum; ++ii) 16 { 17 UInt32 iSkillID = UInt32.Parse(aryLine[ii]); 18 SkillData skillData = GetSkillData(iSkillID); 19 if (null == skillData) 20 { 21 throw (new ArgumentException("ContinualSkillConfig.LoadContinualSkillConfig")); 22 } 23 continualSkill.AddSkillData(skillData); 24 } 25 } 26 streamRead.Close(); 27 }
01 //生成技能配置文件的路徑 02 private string GenerateSkillFilePath() 03 { 04 string sAssetPath = ScriptRuntime.Application.GetAssetPath(); 05 string sPath = sAssetPath + SKILL_RELATIVE_PATH; 06 return sPath; 07 } 08 09 //生成連招配置文件的路徑 10 private string GenerateContinualSkillFilePath() 11 { 12 string sAssetPath = ScriptRuntime.Application.GetAssetPath(); 13 string sPath = sAssetPath + CONTINUALSKILL_RELATIVE_PATH; 14 return sPath; 15 }
01 //根據技能標示符獲取該招技能 02 public SkillData GetSkillData(UInt32 iSkillID) 03 { 04 if (m_vSkills.ContainsKey(iSkillID)) 05 { 06 return m_vSkills[iSkillID]; 07 } 08 else 09 { 10 return null; 11 } 12 } 13 //根據連招標示符獲取連招,若爲空則建立連招對外 14 public ContinualSkillData GetContinualSkillData(UInt32 iContinualSkillID) 15 { 16 if (m_vContinualSkills.ContainsKey(iContinualSkillID)) 17 { 18 return m_vContinualSkills[iContinualSkillID]; 19 } 20 else 21 { 22 ContinualSkillData continualSkill = new ContinualSkillData(iContinualSkillID); 23 m_vContinualSkills.Add(iContinualSkillID, continualSkill); 24 return continualSkill; 25 } 26 }
引擎官方網站:http://www.genesis-3d.com.cn/
官方論壇:http://bbs.9tech.cn/genesis-3d/
官方千人大羣:59113309 135439306
YY頻道-遊戲開發大講堂(徹底免費,按期開課):51735288
Genesis-3D開源遊戲引擎:遊戲起源,皆因有我!!!