游戏技能、buff的代码如何架构

yanx8844 2010-10-21 03:52:10
RPG游戏中的大量技能、buff如何设计、架构呢。

面对各种不同的技能、buff如何用比较好的模式编写出来呢,现在头绪比较混乱,请教各位了。
...全文
1499 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jobot 2010-11-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 sunny352 的回复:]

技能和buff的全套架构不算小,源码就不放了,给你些思路吧

首先一个技能并不只是对对方造成HP伤害,产生的效果会有很多,比如消耗自身MP,给对方/自己加buff等等很多种结果,所以在设计的时候需要设计很多种结果类。而结果ID可以直接填写在外部资源当中,比如表格等。

其次,技能在进行结算的时候会受到buff的处理,比如目标身上有个伤害加深的buff,技能产生的伤害结果通过这个buff的……
[/Quote]
yanx8844 2010-11-15
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 osoon 的回复:]

楼主我真想送你一把剪刀。
[/Quote]什么意思啊⊙﹏⊙b汗
  • 打赏
  • 举报
回复
楼主我真想送你一把剪刀。
yanx8844 2010-11-10
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 kevinyuen 的回复:]

状态和技能的数量和逻辑处理无关
所有这些操作的最终结果是影响了参数某种操作运算所需要的数值。
万变不离其宗~
[/Quote]
不仅仅是数值吧,有的时候还影响到了逻辑
KevinYuen 2010-11-09
  • 打赏
  • 举报
回复
状态和技能的数量和逻辑处理无关
所有这些操作的最终结果是影响了参数某种操作运算所需要的数值。
万变不离其宗~
java4003 2010-11-09
  • 打赏
  • 举报
回复
高人 我是初学者
yanx8844 2010-11-05
  • 打赏
  • 举报
回复
顶起一下buff就是附加属性啥的
zhaogang001 2010-11-01
  • 打赏
  • 举报
回复
我是新来的,顶起~
做游戏的小明 2010-10-31
  • 打赏
  • 举报
回复
技能和buff的全套架构不算小,源码就不放了,给你些思路吧

首先一个技能并不只是对对方造成HP伤害,产生的效果会有很多,比如消耗自身MP,给对方/自己加buff等等很多种结果,所以在设计的时候需要设计很多种结果类。而结果ID可以直接填写在外部资源当中,比如表格等。

其次,技能在进行结算的时候会受到buff的处理,比如目标身上有个伤害加深的buff,技能产生的伤害结果通过这个buff的处理后数值会改变。而且buff效果的种类也会有很多,在目标身上会记录一个buff列表,技能效果会通过这个buff列表来进行处理,所以buff部分直接用责任链就可以实现了。

然后,技能效果在受到buff处理之后就可以执行了,执行部分需要根据不同的效果进行不同的执行,最简单的设计方法就是子类实现基类的纯虚函数的方式,由外部代码统一调用执行。

最后提醒一下,技能产生的效果会有很多,生成的会是一个树形结构而不是一个简单的链。
qq7959501 2010-10-31
  • 打赏
  • 举报
回复
什么是 buff 啊, 求教
yanx8844 2010-10-31
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 sunny352 的回复:]

技能和buff的全套架构不算小,源码就不放了,给你些思路吧

首先一个技能并不只是对对方造成HP伤害,产生的效果会有很多,比如消耗自身MP,给对方/自己加buff等等很多种结果,所以在设计的时候需要设计很多种结果类。而结果ID可以直接填写在外部资源当中,比如表格等。

其次,技能在进行结算的时候会受到buff的处理,比如目标身上有个伤害加深的buff,技能产生的伤害结果通过这个buff的……
[/Quote]谢谢,至少有点想法了。做的过程中再慢慢完善了。
大家尽量再多给点意见:)
双杯献酒 2010-10-27
  • 打赏
  • 举报
回复
找一个游戏的源代码看看吧。
一般是把技能抽象出来统一实现,每个技能的不同数字用表哥配置。

假设我们不同的攻击技能只有命中概率和攻击力不一样,
则可以设计如下:

// 技能使用的伤害
int SkillAttack(int iSkill)
{
int r = GetSkillR(iSkill);
int d = GetSkillD(iSkill);

if( rand()%100 < r)
{
// 命中
return d;
}
else
{
// 技能失手
return 0;
}
}

GetSkillR和GetSkillD分别从表格里取编号为iSkill的技能的命中和伤害
技能定义大致如下:

1 100 1000 // “精确一击”, 命中100%, 伤害1000
2 80 1500 // “愤怒一击”, 命中80%, 伤害1500
3 30 800 // “瞎抓”, 命中30%, 伤害800
等等
yanx8844 2010-10-27
  • 打赏
  • 举报
回复
大家再多给给意见吧
yanx8844 2010-10-25
  • 打赏
  • 举报
回复
自己顶一个,咕~~(╯﹏╰)b

8,305

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧