• QQ21031394

    工作时间

    周一至周五:9:30-18:30

    周末及节日:根据情况调休

  • 手机版二维码

    随时手机查素材

  • 扫描二维码

    加入官方QQ群

站长推荐
Seago 一级会员
  • 未知地域
  • 84发帖数
  • 20主题数
  • 0关注数
  • 24粉丝

[Seago教程] 【通用】哈希表的应用实例(四)

[复制链接]
Seago 发表于 2020-9-1 17:16:34 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题 <
提莫作坊QQ群:提莫作坊www.tbwlm.cn

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
哈希表的应用实例(四)——异步读取
有朋友评论希望能再详细的讲一下自定义值的用法,这点我在最初的哈希表教程中略有提及。但因为我本身是使用J作图的,所以对【逆天】的相关功能并没有什么使用经验,只是顺便研究过他的实现原理,所以给不出太过详细的介绍。
这里只能再稍微补充:
首先,自定义值就是封装好了的哈希表,会用哈希表存数了自然也就会自定义值了。
其次,自定义值,顾名思义,提供给玩家自由定义的值。可以总结出两种特征:
1、玩家自由定义,即可能根据不同的地图、玩法、情况等等,都会相应进行变化。
2、有某种意义,定义,必然是有特定的含义才谈得上定义。那些运行过程中产生的临时数据就谈不上自定义值了,用变量记录就行了。

下面开始正文
前面几篇教程大致介绍了基于哈希表的设计思路,本篇将开始逐步介绍一些稍微复杂的实战应用
许多作者一听到异步都很害怕,害怕掉线、异次元。一定要注意,异步只是一种程序处理的方式,处理的不合理才会出问题,处理正确就不必担心,而且一些复杂的功能异步是必不可少的。
可能导致异次元的原因有很多,这里不做赘述,也说不清楚,但有一个基本原则,就是对handle类型的处理一定要一致。这里的一致指的是每个玩家的电脑运行情况。简单举例,我们两一起玩,我的电脑创建了一个单位,你的电脑也必须执行同样的操作。而那些只用于对玩家展示数据,不影响游戏实质内容的操作,则是安全的。比如镜头、发送消息、选中的单位等等。这些都是每个玩家的主观感受或是操作,必然不可能时时刻刻都一致。本篇要介绍的例子是异步展示多面板数据。
这里所讲的主要是针对使用多面板来展示角色属性的情形。玩家有许多属性,合在一起展示会很占地方,于是使用异步展示数据,每个玩家看到的都是自己的数据。
基本的实现思路是,用哈希表记录每个玩家的详细数据,计时器定期从哈希表读取数据更新多面板内容。如果要求展示的数据必须实时更新则本方法不适用。
(一定要搞清楚主次关系,是游戏中的数据决定了多面板的内容,而不是多面板的内容影响游戏数据,千万不能搞反。)
这里是异步显示数据,所以要满足几个条件以保证安全:
1、多面板的创建一定要是同步的,即每个玩家的游戏都创建了多面板,只存在是否显示以及显示内容的区别。不能有人创建有人不创建。
2、多面板要一样大,即行数列数要一样多。
原因:多面板是由多面板项目组成的,即一个一个格子。多面板和多面板项目都是基于handle的类型,前面说过了,handle不一致会出问题,所以我们要在这个层面上保持一致,再深入的原因暂时不多谈。

结合前几篇内容,我们对此功能进行分析设计。
多面板是如何显示数据的?用过的都知道,指定某一行某一列,然后对他赋值。此时,我们很容易得到了对象的三个属性:行、列、值。于是我们可以进一步得到哈希表的结构,主索引与玩家绑定,次索引对应这几个属性。但是又会遇到新的问题,实际的游戏中玩家会有很多属性,多面板通常也不止一个格子,我们这样的结构显然不能满足。
此前的练功房示例,只有玩家和练功房两者,关系比较简单,所以我们可以简化设计。在这个例子中,有玩家、玩家属性、多面板三者,玩家和玩家属性是一对关系,玩家属性和多面板又是一对关系,所以我们要分开设计两种对象。首先针对玩家和属性对应的关系,以玩家Id作为主索引,属性的编号作为次索引,记录属性的值。针对属性和多面板的对应关系,(因为每个玩家的显示格式都是一样的,所以这里不用关注玩家),我们可以将属性的编号作为主索引,多面板的行和列等作为次索引分别记录值。
属性和多面板的对应关系决定了数据的展现形式,这在游戏过程中通常是不会改变的,我们可以在初始化的时候直接预置好。具体的数据在游戏中是经常变化的,我们只需要根据玩家Id和我们定义好的属性编号更新哈希表存储的数据即可。在每次刷新多面板时,我们先从玩家和属性的关系表中读出玩家属性的值,再从属性和多面板的关系表中读出该属性在多面板中对应的展示位置,然后进行赋值即可。玩家Id采用本地玩家的Id,这样每个玩家读取的都是自己的数据,多面板所展示的也就是自己的数据了,大家互不冲突。
多面板.png
有人会担心异次元的问题。纵观整个流程,我们的存、取是分开进行的。往哈希表中存数时,全都是同步的,只有在取数的过程中采用了本地玩家Id进行异步操作,尽管如此,每个玩家的执行动作也是一致的,都干了同一件事,只是本地玩家Id不同所以最后的结果也不同。而这结果也只是用于展示而已,对游戏本身并没有影响,所以不用担心异次元的问题。
想让多人玩家通过多面板看到不同的数据,必然会涉及异步操作。要么通过多个多面板异步控制显隐,要么采取本示例的方式同一个多面板异步刷新数据。下面说说本方案的优缺点。
优点:
1、异步执行更新,避免了大量的循环操作,运行性能更高。
2、共用1个多面板,且数据结构一致,整体清晰。
缺点:
1、数据不能实时刷新,只能通过计时器进行更新操作。
2、相比异步控制显隐,异步更新数据需要作者对整个机制有更深刻的理解。
游客,如果您要查看本帖隐藏内容请回复

楼主热帖
免责条款:本站仅提供学习的平台,所有资料均来自于网络,版权归原创者所有!本站不提供任何保证,并不承担任何法律责任,如果对您的版权或者利益造成损害,请提供相应的资质证明,我们将于3个工作日内予以删除。

本网站所收集的部分公开资料来源于互联网,转载的目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。本站部分作品是由网友自主投稿和发布、编辑整理上传,对此类作品本站仅提供交流平台,不为其版权负责。如果您发现网站上有侵犯您的知识产权的作品,请与我们取得联系,我们会及时修改或删除。

本网站所提供的信息,只供参考之用。本网站不保证信息的准确性、有效性、及时性和完整性。本网站及其雇员一概毋须以任何方式就任何信息传递或传送的失误、不准确或错误,对用户或任何其他人士负任何直接或间接责任。在法律允许的范围内,本网站在此声明,不承担用户或任何人士就使用或未能使用本网站所提供的信息或任何链接所引致的任何直接、间接、附带、从属、特殊、惩罚性或惩戒性的损害赔偿。

精彩评论35

chance125 发表于 2020-9-2 10:56:58 | 显示全部楼层 <
学习了,感谢分享
Sun丶包子 发表于 2020-9-2 13:58:13 | 显示全部楼层 <
提示: 作者被禁止或删除 内容自动屏蔽
安圣基 发表于 2020-9-2 23:14:52 | 显示全部楼层 <
感谢分享,如果有演示图就好了!
QQ:477368098
不接单,随缘捣鼓模型![/b
q345895843 发表于 2020-9-3 16:43:09 | 显示全部楼层 <
支持一下
sanyangzhihuo 发表于 2020-9-3 17:03:35 | 显示全部楼层 <
太棒了 大佬写的好
347780682 发表于 2020-9-23 15:04:22 来自手机 | 显示全部楼层 <
谢谢分享
W2472032347 发表于 2020-9-25 20:22:17 | 显示全部楼层 <
感谢大佬的分享
Phantom丶 发表于 2020-9-28 16:01:04 | 显示全部楼层 <
大佬,您是真牛B
FrostKing 发表于 2020-12-9 13:13:06 来自手机 | 显示全部楼层 <
大佬牛逼

强调下版规的规定,如有恶意灌水从重处罚:
=====发表主题规则=======
1.主题内容请一定要附带预览图片,谢谢;
2.搬运来的东西请尽量不要卖钱!;
3.发帖有任何疑问请联系QQ21031394;
=====发表回复规则=======
1.禁止直接复制标题内容的;
2.禁止纯数字或者纯字母的;
3.禁止乱打一通文不对题;
4.禁止屠版和刷分行为;
第一次扣分处理,第二次扣分+警告,警告三次禁言三天,绝不手软,情况严重的直接封号,请大家珍惜自己的账号!

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

猜你喜欢
天工维度唯一QQ群
786014245

欢迎进群交流,入群答案:编辑器

  • 官方在线客服

    QQ客服:小雪

    点击交谈

    QQ客服:砂糖

    点击交谈

    团队老大:荀公子

    商务合作
  • 上海市静安区共和新路4718号宏慧新汇园6号楼603室

  • 手机扫码查看手机版

    手机查找资源更方便

  • 扫一扫关注官方微信

    加入官方QQ群

Powered by 天天RPG&DZX3.4 ©2020-2021 Comsenz Inc.提百万设计( 沪ICP备18032615号-1 )营业执照