成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何設計一個易擴展的游戲技能系統?

開發
技能沒什么框架,只是有很多字段罷了,比如cd、施法距離、釋放動畫、飛行動畫等等。。。其實游戲技能不是一直不是什么難點,畢竟根據每個屬性實現邏輯就好了。

[[142455]]

技能沒什么框架,只是有很多字段罷了,比如cd、施法距離、釋放動畫、飛行動畫等等。。。其實游戲技能不是一直不是什么難點,畢竟根據每個屬性實現邏輯就好了。

技能真正麻煩一點是其實是 所謂的“效果”。因為從很久以前,游戲設計的時候就把效果這個概念添加進來了。對于 游戲戰斗對象主體,我們暫時叫做BattleAgent簡稱BA。影響BA的數據有很多,比如移動速度、攻擊力、基礎屬性等等,影響的入口也有很多:

  • 技能
  •  buff/被動技能
  • 裝備
  • 強化
  • 寶石

等等,而這些實際上從影響結果沒什么區別。

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

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

裝備是特定容器對BA持續修改數值。

所以這里游戲開發者們抽象出了 效果這個概念。

對與效果而言,只存在2個行為:

    對BA產生數值影響

    對BA撤銷數值影響

所以效果最終定義為:

 

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

 

而對于其他功能實體來說,就可以簡化為效果的容器:

 

  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.  

 

對于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.  

 

對于被動技能(其實也是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.  

 

裝備同理被動技能,是不是很清晰?而對于復雜的技能效果,因為我們已經抽象出了Effect。

所以怎么實現也就很容易了!

 

  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.  

 

看起來是不是很簡單,我們來寫個變羊。

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

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.  

 

就是這么簡單,同學你明白了嗎?

如果要深入一點的話,就是變羊是持續型的,到了時間會變回來。

所以我們要一個可以觸發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.  

 

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

 
 
 
責任編輯:王雪燕 來源: 游資網
相關推薦

2015-08-18 10:00:53

2024-11-20 13:18:21

2022-03-29 10:57:39

運維服務架構

2018-09-18 09:38:11

RPC遠程調用網絡通信

2024-04-24 10:38:22

2023-09-08 08:10:48

2023-09-08 08:22:30

2024-08-27 12:49:20

2020-09-02 07:22:17

JavaScript插件框架

2016-01-06 09:57:23

編寫PHP擴展

2013-08-14 10:48:23

實時計算流計算

2022-12-28 14:07:52

Gamerzilla開源游戲

2013-07-01 11:01:22

API設計API

2022-07-18 08:02:16

秒殺系統后端

2025-01-22 08:00:00

架構秒殺系統Java

2025-04-30 08:56:34

2020-02-14 08:05:05

數據網格高擴展易維護

2016-09-30 10:13:07

分布式爬蟲系統

2024-06-17 11:59:39

2020-03-26 09:36:06

AB Test平臺的流量
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品视频一区二区三区四区 | 99资源站| 国产日韩欧美一区 | 欧美一区二区三区久久精品视 | 午夜精品一区二区三区免费视频 | 欧美激情va永久在线播放 | 2021狠狠干| 日韩欧美国产一区二区三区 | 亚洲国产日韩欧美 | 99久久精品国产一区二区三区 | 欧美视频三区 | 97超碰在线播放 | 亚洲国产精品久久久久秋霞不卡 | 亚洲精品国产电影 | 日韩一区二区三区在线 | 中文字幕精品一区二区三区精品 | 天天爽天天操 | 欧美一级电影免费观看 | 久久51| 成人午夜高清 | 亚洲国产精品99久久久久久久久 | 国产精品久久久99 | 成人国产午夜在线观看 | 91在线观看免费视频 | 久久精品久久精品久久精品 | 国产精品免费观看 | 亚洲婷婷一区 | 国产精品久久久久久久久久妞妞 | 一区二区三区免费在线观看 | 欧美精品一区二区免费 | 国产一区二区三区免费 | 亚洲成人精品 | 精品一区二区久久 | 国产视频福利在线观看 | 精品国产91乱码一区二区三区 | 国产综合在线视频 | www成人免费视频 | 中文字幕视频在线看 | 一区二区在线观看免费视频 | 香蕉婷婷 | 色综合久 |