日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
如何設(shè)計(jì)一個(gè)易擴(kuò)展的游戲技能系統(tǒng)?

技能沒(méi)什么框架,只是有很多字段罷了,比如cd、施法距離、釋放動(dòng)畫(huà)、飛行動(dòng)畫(huà)等等。其實(shí)游戲技能不是一直不是什么難點(diǎn),畢竟根據(jù)每個(gè)屬性實(shí)現(xiàn)邏輯就好了。

創(chuàng)新互聯(lián)建站是一家專(zhuān)注于網(wǎng)站建設(shè)、網(wǎng)站制作與策劃設(shè)計(jì),神農(nóng)架林區(qū)網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)建站做網(wǎng)站,專(zhuān)注于網(wǎng)站建設(shè)十年,網(wǎng)設(shè)計(jì)領(lǐng)域的專(zhuān)業(yè)建站公司;建站業(yè)務(wù)涵蓋:神農(nóng)架林區(qū)等地區(qū)。神農(nóng)架林區(qū)做網(wǎng)站價(jià)格咨詢(xún):18980820575

技能真正麻煩一點(diǎn)是其實(shí)是 所謂的“效果”。因?yàn)閺暮芫靡郧?,游戲設(shè)計(jì)的時(shí)候就把效果這個(gè)概念添加進(jìn)來(lái)了。對(duì)于 游戲戰(zhàn)斗對(duì)象主體,我們暫時(shí)叫做BattleAgent簡(jiǎn)稱(chēng)BA。影響B(tài)A的數(shù)據(jù)有很多,比如移動(dòng)速度、攻擊力、基礎(chǔ)屬性等等,影響的入口也有很多:

  • 技能
  •  buff/被動(dòng)技能
  • 裝備
  • 強(qiáng)化
  • 寶石

等等,而這些實(shí)際上從影響結(jié)果沒(méi)什么區(qū)別。

首先我們先談區(qū)別,對(duì)于這些數(shù)值影響,其實(shí)區(qū)別只有入口或者說(shuō)是作用的方式,技能是BA(castor)對(duì)BA(target)釋放造成的瞬間數(shù)值影響。

buff是castor對(duì)BA(target)安裝后造成的持續(xù)數(shù)值影響,分為按時(shí)觸發(fā)瞬發(fā)和持續(xù)修改數(shù)值。

裝備是特定容器對(duì)BA持續(xù)修改數(shù)值。

所以這里游戲開(kāi)發(fā)者們抽象出了 效果這個(gè)概念。

對(duì)與效果而言,只存在2個(gè)行為:

    對(duì)BA產(chǎn)生數(shù)值影響

    對(duì)BA撤銷(xiāo)數(shù)值影響

所以效果最終定義為:

 
 
  1. interface Effect { 
  2.  
  3.     void cast(BattleAgent target); 
  4.  
  5.     default void reverse(){ 
  6.  
  7.     } 
  8.  

 

而對(duì)于其他功能實(shí)體來(lái)說(shuō),就可以簡(jiǎn)化為效果的容器:

 
 
  1. interface EffectContainer extends Effect{ 
  2.  
  3.     List getEffects(); 
  4.  

 

這樣我們就只要定義不同效果容器就可以了,

比如技能:

 
 
  1. class abstract  Skill implements EffectContainer{ 
  2.  
  3.     public void spellTo(BattleAgent target){ 
  4.  
  5.         foreach(Effect effect in getEffects()){ 
  6.  
  7.             effect.cast(target); 
  8.  
  9.         } 
  10.  
  11.     } 
  12.  

 

對(duì)于buff:

 
 
  1. class abstract Buff implements EffectContainer{ 
  2.  
  3.     public void update(){ 
  4.  
  5.         foreach(Effect effect in getEffects()){ 
  6.  
  7.            effect.cast(target); 
  8.  
  9.         } 
  10.  
  11.     } 
  12.  

 

對(duì)于被動(dòng)技能(其實(shí)也是buff):

 
 
  1. class abstract  BuffSkill extends Buff { 
  2.  
  3.     public void install(){ 
  4.  
  5.         foreach(Effect effect in getEffects()){ 
  6.  
  7.             effect.cast(target); 
  8.  
  9.     } 
  10.  
  11.  
  12.     public void unstall(){ 
  13.  
  14.         foreach(Effect effect in getEffects()){ 
  15.  
  16.             effect.reverse(target); 
  17.  
  18.         } 
  19.  
  20.     } 
  21.  

 

裝備同理被動(dòng)技能,是不是很清晰?而對(duì)于復(fù)雜的技能效果,因?yàn)槲覀円呀?jīng)抽象出了Effect。

所以怎么實(shí)現(xiàn)也就很容易了!

 
 
  1. class DamageEffect implements Effect{ 
  2.  
  3.     private int damage = 100; 
  4.  
  5.     public void cast(BattleAgent target){ 
  6.  
  7.         target.hp -= damage; 
  8.  
  9.     } 
  10.  

 

看起來(lái)是不是很簡(jiǎn)單,我們來(lái)寫(xiě)個(gè)變羊。

這個(gè)技能包括 2 個(gè)效果 外形修改和屬性。

1、外形變羊

 
 
  1. class ChangSheepEffect implements Effect{ 
  2.  
  3.     public void cast(BattleAgent target){ 
  4.  
  5.         target.gameObject = GameManager.getAnimeObject("sheep"); 
  6.  
  7.     } 
  8.  

 

2、攻擊力和防御力變0 速度變慢

 
 
  1. class PropChangeEffect implements Effect{ 
  2.  
  3.     public void cast(BattleAgent target){ 
  4.  
  5.         target.atk = 0; 
  6.  
  7.         target.def = 0; 
  8.  
  9.         target.speed = 50; 
  10.  
  11.     } 
  12.  

 

就是這么簡(jiǎn)單,同學(xué)你明白了嗎?

如果要深入一點(diǎn)的話,就是變羊是持續(xù)型的,到了時(shí)間會(huì)變回來(lái)。

所以我們要一個(gè)可以觸發(fā)buff的效果:

 
 
  1. class TriggerBuffEffect implements Effect{ 
  2.  
  3.     BuffSkill buff = new BuffSkill (){ 
  4.  
  5.         public List<>getEffects(){ 
  6.  
  7.             return new List().add(new ChangSheepEffect()).add(new PropChangeEffect()); 
  8.  
  9.         } 
  10.  
  11.     } 
  12.  
  13.     public void cast(BattleAgent target){ 
  14.  
  15.         int time = 3000;//3秒 
  16.  
  17.         target.addBuff(buff,time); 
  18.  
  19.     } 
  20.  

 

然后把這個(gè)TriggerBuffEffect加到技能能上就ok了,就完成了一個(gè)可以變羊3秒的技能。

   


網(wǎng)頁(yè)標(biāo)題:如何設(shè)計(jì)一個(gè)易擴(kuò)展的游戲技能系統(tǒng)?
網(wǎng)頁(yè)網(wǎng)址:http://www.5511xx.com/article/dhjsjod.html