2017年2月25日,广州前2天开始降温,久违的感受到寒冷的天气了。也在这个时候,确定了新的工作,希望以后能有更好的发展,对得起家人和朋友和恋人。在这里也感谢一下上家公司带我的组长,学到了很多东西,希望他的发展也顺风顺水。
前述完了,这次主要讲解一下之前简单做的一个Buff机制。
Buff也就是状态,这里不叙述DeBuff和Buff,统一写作Buff。个人认为,Buff和状态机颇为类似,不同的地方是Buff是可以叠加的,而状态机有且只有一个正在进行中的状态。之后也会写一写简单状态机的构成,暂不在这里唠叨了。那么简单构成状态的有4个方法:进入Buff->刷新Buff->结束Buff->Buff数据返还。假设一个简单的冰冻状态,进入Buff=使物体静止,刷新BUff=每秒HP-1,结束Buff=冰块碎裂,Buff数据返还=使物体继续移动。当然可能有更加复杂的Buff,例如阴阳师中椒图的那啥技能(伤害平分),LOL中的鸟盾(范围内+魔抗)等等。技能也有指向性,目标性,范围,敌方友方,前摇,后摇等等。最常见的就是装备、技能、人物属性使自身、队友、敌人加上Buff,这里也不再唠叨了。
public interface IBuff
{
int GetID();
void OnEnter( );
void OnUpdate( );
void OnExit( );
}
public class BuffBase : IBuff
{
public delegate void EnterDel();
public delegate void UpdateDel();
public delegate void ExitDel();
public delegate void ReturnDel();
public object[] parms; //参数列表
public BuffBase()
{
}
public void SetDel()
{
}
public void SwitchUpdate(bool canUpdate)
{
this.canUpdate = canUpdate;
}
public int GetID()
{
return id;
}
public void OnEnter()
{
if (enterDel != null) enterDel();
}
public void OnUpdate()
{
if (!canUpdate) return;
keepCount += Time.deltaTime;
deltaCount += Time.deltaTime;
if (deltaCount >= deltaTime)
{
deltaCount = 0;
if (updateDel != null) updateDel();
}
if (keepCount >= keepTime)
{
canDestroy = true;
}
}
public void OnExit()
{
if (canReturn)
{
if (returnDel != null) returnDel();
int runTime = (int)(keepCount / deltaTime);
}
//时间到 或者 其他情况触发的清除buff会判断是否触发结束效果
if (canDestroy || (!canDestroy && canExit))
{
if (exitDel != null) exitDel();
}
}
由于时间问题,暂时写到这里。。。。
还需要有一个BuffHelper的帮助类,去管理某个物体上的所有Buff,需要的操作就是增删改查。当某个物体需要添加一个Buff的时候,BuffHelper.AddBuff(new BuffBase()); 当然,一个Buff最多能叠加多少个、是否覆盖这些就是策划的需求了,所以BuffHelper也是需要动态修改的,还不能做到完全通用,但可以尽可能地包含所有情况,这当然就是程序的经验和代码水平了。下次想做的一个简单的技能系统,希望有大神指点下!
下次再见。