开发易扩展的技能系统

技能,不过是一个属性的集合,比如技能特效,冷却时间,施法距离等。

游戏技能就是实现每个属性的逻辑。

但技能的难点还是在于技能效果

 

效果是什么呢?

就是技能所要造成的数值信息改变。

 

游戏画面再绚丽,本质上也就是数值的传递修改。

很多种情况能够造成效果

技能

被动技能

BUFF

装备

 

这些都是影响游戏对象数据的入口,比如我施放了一个造成伤害并持续减速的技能,那就造成了两种效果,一个伤害一个减速,伤害会让对象生命值降低,减速会让对象移动速度降低。

但是光说效果,好像体现不了什么。

但是我们知道了,一切对象数据的改变都可以抽象为效果

那我们把效果这个概念抽象出来

1.对游戏对象造成数值影响

2.撤销对游戏对象造成的影响

 

Interface Effect{

void Cause();   //造成影响

Void Revert();  //撤销影响

}

 

那我们某个功能的实例就是包含了多种效果的容器

 

 interface EffectContainer : Effect
 {
        List<Effect> GetEffects();
 }


 

哈哈,举几个例子,比如技能影响

abstract class Skill :EffectContainer
{
   public void Spell(GameObject target)
    {
      foreach(Effect effect in GetEffects())
       {
           effect.Cause(target);
      }    
   } 
}


 

BUFF技能也是如此,被动技能多了撤销影响,因为被动通常有时间限制

 

abstractclass BuffSkill :Buff {
    publicvoid install(){
      foreach(Effect effect in GetEffects()){
        effect.Cause(target);
     }    
    }
    publicvoid unstall(){
      foreach(Effect effect inGetEffects()){
        effect.Revert(target);
     }    
    }
}


 

----------------------------------我是线---------------------------------

说到底效果该怎么定义呢?别急下面就是

 

//属性改变效果

class StatusChangeEffect : Effect{
<span style="white-space:pre">	</span>private int intellect = 20;
<span style="white-space:pre">	</span>private int agility = 20;
<span style="white-space:pre">	</span>…..
<span style="white-space:pre">	</span>public void Cause(GameObejct target){
<span style="white-space:pre">		</span>target.intellect -=intellect;
<span style="white-space:pre">		</span>target.agility +=agility ;
<span style="white-space:pre">	</span>}
}


 

 

简单来说,就是把技能、状态、装备效果的共性提取出来,他们都对目标造成影响,所以,把这项抽象出来,作为Effect,把目标对象作为传入参数,在这个Effect的线程中,我们就可以实现对目标状态的修改了。

 

 

---------------什么怎么把效果加入技能?

技能继承EffectContainer接口了,实现了GetEffects()方法,这个方法写成这样不就好了


public void GetEffects(){
	List<Effect> effectList = new List<Effect>();
	effectList.Add(new DamgeEffect());
	effectList.Add(new StatusChangeEffect ());
	return effectList;
}


 

 

-----------------------------GG-----------------------------

这下好了吧。大概都解释完毕了。相信也比较清楚了。那这篇文章就这样了。。吐血中。。。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值