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

創(chuàng)新互聯(lián)建站是一家專注于網(wǎng)站建設(shè)、網(wǎng)站制作與策劃設(shè)計(jì),神農(nóng)架林區(qū)網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)建站做網(wǎng)站,專注于網(wǎng)站建設(shè)十年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:神農(nóng)架林區(qū)等地區(qū)。神農(nóng)架林區(qū)做網(wǎng)站價格咨詢:18980820575
技能真正麻煩一點(diǎn)是其實(shí)是 所謂的“效果”。因?yàn)閺暮芫靡郧?,游戲設(shè)計(jì)的時候就把效果這個概念添加進(jìn)來了。對于 游戲戰(zhàn)斗對象主體,我們暫時叫做BattleAgent簡稱BA。影響B(tài)A的數(shù)據(jù)有很多,比如移動速度、攻擊力、基礎(chǔ)屬性等等,影響的入口也有很多:
- 技能
- buff/被動技能
- 裝備
- 強(qiáng)化
- 寶石
- 魂
等等,而這些實(shí)際上從影響結(jié)果沒什么區(qū)別。
首先我們先談區(qū)別,對于這些數(shù)值影響,其實(shí)區(qū)別只有入口或者說是作用的方式,技能是BA(castor)對BA(target)釋放造成的瞬間數(shù)值影響。
buff是castor對BA(target)安裝后造成的持續(xù)數(shù)值影響,分為按時觸發(fā)瞬發(fā)和持續(xù)修改數(shù)值。
裝備是特定容器對BA持續(xù)修改數(shù)值。
所以這里游戲開發(fā)者們抽象出了 效果這個概念。
對與效果而言,只存在2個行為:
對BA產(chǎn)生數(shù)值影響
對BA撤銷數(shù)值影響
所以效果最終定義為:
- interface Effect {
- void cast(BattleAgent target);
- default void reverse(){
- }
- }
而對于其他功能實(shí)體來說,就可以簡化為效果的容器:
- interface EffectContainer extends Effect{
- List getEffects();
- }
這樣我們就只要定義不同效果容器就可以了,
比如技能:
- class abstract Skill implements EffectContainer{
- public void spellTo(BattleAgent target){
- foreach(Effect effect in getEffects()){
- effect.cast(target);
- }
- }
- }
對于buff:
- class abstract Buff implements EffectContainer{
- public void update(){
- foreach(Effect effect in getEffects()){
- effect.cast(target);
- }
- }
- }
對于被動技能(其實(shí)也是buff):
- class abstract BuffSkill extends Buff {
- public void install(){
- foreach(Effect effect in getEffects()){
- effect.cast(target);
- }
- }
- public void unstall(){
- foreach(Effect effect in getEffects()){
- effect.reverse(target);
- }
- }
- }
裝備同理被動技能,是不是很清晰?而對于復(fù)雜的技能效果,因?yàn)槲覀円呀?jīng)抽象出了Effect。
所以怎么實(shí)現(xiàn)也就很容易了!
- class DamageEffect implements Effect{
- private int damage = 100;
- public void cast(BattleAgent target){
- target.hp -= damage;
- }
- }
看起來是不是很簡單,我們來寫個變羊。
這個技能包括 2 個效果 外形修改和屬性。
1、外形變羊
- class ChangSheepEffect implements Effect{
- public void cast(BattleAgent target){
- target.gameObject = GameManager.getAnimeObject("sheep");
- }
- }
2、攻擊力和防御力變0 速度變慢
- class PropChangeEffect implements Effect{
- public void cast(BattleAgent target){
- target.atk = 0;
- target.def = 0;
- target.speed = 50;
- }
- }
就是這么簡單,同學(xué)你明白了嗎?
如果要深入一點(diǎn)的話,就是變羊是持續(xù)型的,到了時間會變回來。
所以我們要一個可以觸發(fā)buff的效果:
- class TriggerBuffEffect implements Effect{
- BuffSkill buff = new BuffSkill (){
- public List<>getEffects(){
- return new List().add(new ChangSheepEffect()).add(new PropChangeEffect());
- }
- }
- public void cast(BattleAgent target){
- int time = 3000;//3秒
- target.addBuff(buff,time);
- }
- }
然后把這個TriggerBuffEffect加到技能能上就ok了,就完成了一個可以變羊3秒的技能。
文章名稱:如何設(shè)計(jì)一個易擴(kuò)展的游戲技能系統(tǒng)?
標(biāo)題來源:http://m.fisionsoft.com.cn/article/dhjsjod.html


咨詢
建站咨詢
