游戏开发论坛

 找回密码
 立即注册
搜索
楼主: 猴与花果山

[原创] [技术交流] 几乎是全类型游戏任务机制设计中的“雾点”

  [复制链接]

0

主题

1

帖子

4

积分

新手上路

Rank: 1

积分
4
发表于 2013-8-28 09:54:22 | 显示全部楼层
如果您是做文案的,真心建议您好好提升一下文字表述艺术和能力

0

主题

80

帖子

890

积分

高级会员

Rank: 4

积分
890
发表于 2013-8-28 13:47:37 | 显示全部楼层
Yuki001 发表于 2013-8-26 23:37
猴子的任务系统说的太好了.这样的机制非常灵活.没什么好挑刺的,只能补充说明下自己的理解了.
前面说的第一 ...

大爱!!总算明白了tag机制

0

主题

80

帖子

890

积分

高级会员

Rank: 4

积分
890
发表于 2013-8-28 17:24:00 | 显示全部楼层
猴与花果山 发表于 2013-8-26 19:16
http://bbs.gameres.com/thread_213225_1_1.html
你可以先看下这个,其实Tag机制的核心意义就是不需要动 ...

嗯 现在能看明白 也知道怎么设计表的结构了

28

主题

776

帖子

866

积分

高级会员

Rank: 4

积分
866
发表于 2013-8-28 20:05:53 | 显示全部楼层
本帖最后由 meigo 于 2013-8-28 22:22 编辑

设计回调点其实并不是一个聪明的做法。

实际上在立项之初,就应该规划好游戏系统类型和任务类型以及对象类型。确定好哪些是父类哪些是子类以及类与类之间的关系并用标签来标示他们。

比如我设计了三个系统用QWE表示吧,他们分别对应道具(Q)合成(W)战斗(E)

战斗系统中,游戏由风,地,水,火四大元素构成,那么风(wind),地(loudly),水(water),火(fire)是所有对象的父类,而风水地火本身又属于战斗系统,也就是E类。

游戏中的对象比如怪物又分人形(human),野兽(savage),金属(metal),元素(element),那么这些类型隶属于风,地,水,火,是他们的子类。

游戏中的怪物火焰哥布林E_fire_human_a,火焰领主E_fire_savage_b,火焰狼E_fire_element_b虽然一个是人形系一个是元素系一个是野兽系,但是都属于火(fire)类型的怪物并隶属于战斗系统。

这是时候如果某个任务要求击杀火焰(fire)类型的怪物15个,那么这个任务属于E类任务。当接取这个任务的时候(fire)标签开始询问他老爸(E)是否刷新任务列表,他老爸(E)询问任务类型,符合条件(E类)则刷新,显示杀死火焰系怪物为0只。这时候每当(fire)标签对应的数值发生变化(fire)标签就会询问(E)任务系统是否刷新,这个时候因为火焰哥布林和火焰领主的老爸都是(E)所以不管杀那个,任务列表上的数字都会上升,只到满15与设定值相等该任务就会记录成已完成。

如果另外一个任务是击杀人形系(human)怪物一只,那么这个任务同样属于E类。当接取这个任务的时候(human)标签开始询问他老爸(fire)是否刷新任务列表,(fire)必须询问他老爸(E)然后由(E)询问任务类型,符合条件(E类),如果符合则刷新。

上面这种情况比较简单,那么当一个对象同时属于几个系统的时候问题就变得复杂了。

现在有四只哥布林,他们分别是火焰哥布林E_fire_human_a,冰霜哥布林E_water_human_a,飓风哥布林E_wind_human_a,大地哥布林E_loudly_human_a。

这时候我接到一个任务让我杀哥布林(a)10只,那么这个任务同样属于E类。当接取这个任务的时候(a)标签开始询问他老爸(human)是否刷新任务列表,(human)必须询问他四个老爸(fire,water,wind,loudly),然后着四个家伙又去问他们共同的老爸(E)最后由(E)询问任务类型,符合条件(E类),如果符合则刷新。这时候无论是杀的是何种哥布林,都会算作有效击杀。

再举例比如一瓶子蓝色药水(blue),打怪合成和商店都能产出蓝色药水,那么它们分别属于合成系统W_blue和战斗系统E_blue还有道具系统Q_blue,也就是blue有三个老爸,他们分别是QWE。

这时候我同时接到三个任务:

任务一让我合成一瓶蓝色药水,那么这个任务属于W类。

任务二让我打怪取得一瓶蓝色药水,那么这个任务属于E类。

任务三让我买一瓶药水,那么这个任务属于Q类。

当接取这些任务的时候(blue)标签同时询问他三个老爸(QWE)是否刷新任务列表,这时候三个任务都被刷新了。然后我打怪获得了一瓶蓝色药水,也就是E_blue,因为blue标签对应的数值发生变化blue会先询问他老爸(E)然后由(E)去询问任务系统是否刷新任务列表。任务一告诉(E)我属于(W)不属于(E),所以任务一无变化,任务二告诉(E)我也属于(E)结果任务二完成,任务三告诉(E)我属于(Q)不属于(E),所以任务三也无变化。

这套体系的整个流程就是只有在接受任务的时候,才能获取任务完成需求对象的标签,由这个标签层层向上询问,只有最上级才能向最上级询问并反馈结果。这样做既避免了交叉传递,也避免了大量的回调点产生的冗余计算。




0

主题

32

帖子

113

积分

注册会员

Rank: 2

积分
113
发表于 2013-8-29 00:43:44 | 显示全部楼层
meigo 发表于 2013-8-28 20:05
设计回调点其实并不是一个聪明的做法。

实际上在立项之初,就应该规划好游戏系统类型和任务类型以及对象类 ...

你说的还是基于中间Tag机制的依赖调用,例如你说到击杀怪物,怪物有一个标签E_fire_human_a,逻辑传递是这样的

回调点(击杀怪物的时候,战斗系统产生) ----> 中间机制(E ,fire , human,a 4个按照分隔符Tag的更新) -----> 任务系统(对标签对应的任务进行刷新)

其实你刚才描述的是任务系统的刷新组织规则.我换一种角度理解和扩展下,就是任务带有tag触发的与操作.这样任务系统的每个任务的一个子目标,会在对应的tag全部触发时候才计算,
举个例子,以你的例子为例,假设你要击杀a怪物10只,实际上你的任务的目标是 "E" and "a" 全触发,进行更新计算. 假设我杀了一个E_fire_human_a,这时候这个怪物触发了4个tag : "E" "fire" "human" "a",这时候你的任务的"E" 和 "a" tag都触发,并且"a" tag的计数增加1.那你的任务就会刷新,同样你杀E_water_human_a,也会刷新这个任务.另外如果有一个任务目标叫"E" and "fire" and "a",你杀了E_fire_human_a,由于同时满足3个tag触发,这个任务也会刷新.
后面的药水也是一样,如果你需要在战斗系统获得蓝药水触发,那你的tag 就是 "E" and "blue",那么战斗获得的"E_blue" 会触发,而"Q_Blue"就不会触发,但如果有一个任务目标,让你通过任何系统只要获得一个蓝药水就可以,那这个任务的tag 仅仅就是"blue",这时候"E_blue" , "Q_blue","W_blue" 都可以触发.

28

主题

776

帖子

866

积分

高级会员

Rank: 4

积分
866
发表于 2013-8-29 11:17:52 | 显示全部楼层
本帖最后由 meigo 于 2013-8-29 11:24 编辑
Yuki001 发表于 2013-8-29 00:43
你说的还是基于中间Tag机制的依赖调用,例如你说到击杀怪物,怪物有一个标签E_fire_human_a,逻辑传递是这样 ...

你这么理解也可以,区别在于LZ的做法是把怪物死亡作为固定回调点,每次怪物死亡战斗系统都会询问任务系统一遍,当我没有接取相应怪物的任务的时候会产生大量冗余计算。我的做法是你接取任务的时候,任务完成条件里面的对应标签激活对应“回调点”,而怪物死亡之后战斗系统是否询问任务系统取决于你有没有通过接取任务激活对应标签。

核心区别是:我是通过“对象”来管理任务系统,LZ是通过“节点”来管理任务系统。

0

主题

256

帖子

1559

积分

金牌会员

Rank: 6Rank: 6

积分
1559
发表于 2013-8-29 11:33:07 | 显示全部楼层
就没看懂过 看来做策划完全不够格啊

5

主题

80

帖子

855

积分

高级会员

Rank: 4

积分
855
发表于 2013-8-29 18:26:20 | 显示全部楼层
每期必看。。

3

主题

13

帖子

39

积分

注册会员

Rank: 2

积分
39
发表于 2013-8-30 12:57:01 | 显示全部楼层
策划不用考虑怎么实现吧。如果要思考实现方法,策划的逻辑思维一般来说都是不够用的。

0

主题

39

帖子

142

积分

注册会员

Rank: 2

积分
142
发表于 2013-8-30 16:57:53 | 显示全部楼层
从根本而言,系统的所有逻辑无非是触发和执行
一个构架良好的系统,开始其提供的触发方式和执行方式就应当能满足后面的设计。

比如你提到的哥布林问题,从开始对怪物就应该有概念分类,
如哥布林是编号MOST003200,红哥布林是MOST003201
那么读取所有哥布林只要能用筛选前面8位编号是MOST0032就行,
而系统架构支持在触发中以此为条件,你就能很方便的进行任务设计。

同理其他的触发方式和执行方式也都是如此。
在设计的初期,至少90%可能发生的事情都在架构控制之内,
后面你才好去做针对于任何一个系统的控制。

不然即使你完成了系统设计,由于超出架构,也未必能高效的生产。
而本质上,游戏比得就是提供内容的质量和速度,
不能高效的生产,即使完成意义也不大,因为你不是在做一锤子的单机。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2024-12-22 15:14

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表