猫史档案馆


【教程】让云列表的传输速度直线提升!

用户:星际畅想之梦星际畅想之梦查看:448 回复:18 评论:71 创建时间:2022-06-13T19:34:03


在kitten编辑器中有2个很常用的扩展库,它们就是云变量和云列表。那么,在你使用云数据库的时候有没有遇到过以下问题:

  1. 云列表不够用
  2. 云列表传输速度过慢

我发现,在社区的论坛中,很少有这些问题的解决方案,即使有,大部分的教程也十分复杂,会让萌新望而生畏。

所以,本期教程,它来了!!!

观前提示:本期教程主要针对第二个问题进行解决,以提升创作过程中的编辑体验,作者文学也不好,在此教程贴中难免会出现一些错误,大家可以在评论区中指正,不喜勿喷。

众所周知,云列表的传输速度属实是一言难尽,一般云列表会有0.5-1s的传输延迟,也就是说,你修改云列表数值的积木运行完毕0.5-1s后,云列表才会更新数据,这会导致大量的bug出现(作者也是受害匪浅),那要如何解决这个问题呢?

答案是需要一个公有云变量,对,只需要一个公有云变量!

原理其实很简单,只需要利用公有云变量传输速度很快的特性,在更新公有云列表的时候向公有云变量写入此次更新所改变的内容,并将这次更新提前存储到普通列表(传输速度快)中,即可实现效果,以下是具体的流程图

center_image

以下是代码编写完毕后的具体效果(左边为正常云列表传输,右方为优化后传输)

center_image

Ok,理论说完了,我们来实践,具体的积木内容很简单,这里演示部分云积木的速度提升过程,下面是步骤:

  1. 设置函数。设置使用积木的函数(当然如果不嫌麻烦的话可以手动调用)center_image
  2. 添加判断。添加收到云变量更改的判断,这里只演示一个模块的代码center_image
  3. 设置初始化模块,让刚进入的玩家同步云数据center_image

 

       当你把所有模块的代码都编写完毕,这个程序就可以正常使用了,不过要注意的是在使用的时候需要使用函数模块,在调用的时候需要调用普通列表,并且尽量不要使用重复执行更改云列表,如果需要使用请加入等待,如center_image

        什么?你懒得编?没关系!作者为你们准备了快捷函数模板,可以快捷使用,该作品50赞开源!!

 点击快速进入!!!

 


回复

上一页第 1 页 / 共 1 页下一页
星际畅想之梦星际畅想之梦

链接没用纯文本粘贴,出问题了,在评论区发下:https://shequ.codemao.cn/work/150657742 gif没法看,你们自己去作品测试吧awa

点赞1


评论


Asheep233Asheep233

这样子云列表只能发挥一个云存储的作用,本质上不是加快传输速度

点赞2


评论

会存在时序问题

对于游玩人数>10的MMORPG来说,就失去作用了

可以试试改成时分,但是整体帧率会下降2^n次

不是的,你可以进我的作品试一试

我的教程只是一部分,主要代码太长了

不失去作用啊

https://shequ.codemao.cn/work/150657742

亲测过

不是,我的意思是

对于游玩人数>10的mmorpg,需要随时记录玩家坐标

为了维持帧率,需要每帧记录一次,这就需要每个玩家对应一个公云变量才行

可是这种东西你用云列表也实现不了啊

逐帧云列表记录用什么优化手段也做不到,除非官方改云列表传输速度,但如果改了云列表传输速度的话猫厂的云数据库会受不了的

应该是网络延迟吧

一个公有云变量能存1024个字符串

有没有可能利用时序,交叉插入坐标,实现100玩家的逐帧记录

成了

https://shequ.cod喵/work/150753988

100玩家????就算能做出来会有这么多人匹配吗

而且如果要做moba或者吃鸡之类的联机,地图肯定是很大的,所以说坐标会经常是3位数,加上分隔符逗号是四位数,如果用两个公有云变量来传递,一个记录x,一个记录y的话,100个人,一个人占4位数,就是400位数,这就很麻烦了

况且bcm网页程序有个问题就是切屏不会执行程序,如果游玩过程中一个玩家切屏那么程序就有可能导致崩溃(别问我怎么知道的)

对于切屏,我有一个已经成熟的下线检测

对于切屏生效

精确到帧

能发个作品吗?


麟_月麟_月

如果可以加速多个,就能做5v5了

点赞0


评论

可以加速多个

亲测有效,但需要加点等待,不能重复执行中不加等待


𝙲ℴ𝗌𝔦𝒹ₑ𝑟𝙲ℴ𝗌𝔦𝒹ₑ𝑟

翻译+最简:

同时在变量和列表(云端的)中传递信息

 

点赞0


评论

对的,后续还可以根据情况进行匹配判断,减少出错率

首先上传云变量然后上传云列表(获取单个数据渠道设为云变量),保持等待到云列表出现传输内容,发出删除请求(由所有人执行),等到删除完毕(渠道设为云列表)

为防止数据残留:要不停对比列表,删除云变量中重复的

我现时开源一下,你可以看看我的思路

a不好意思来晚了()

我好奇:为什么不用一个功能字符控制加入/删除

用那么多分开列表,为什么不弄个暂存列表?)

通过云变量上传对储存在各个玩家的本地列表(同步更新)更改请求


𝙲ℴ𝗌𝔦𝒹ₑ𝑟𝙲ℴ𝗌𝔦𝒹ₑ𝑟

·一个未解决的问题

 

云变量的传输是云端返回的

还是先本地存储再传输的

点赞0


评论

直接云端返回,然后接收到云端再存储

实验过?

逻辑是这样的


伴雪纷飞伴雪纷飞

其实换言之就是云变量当云列表用

点赞1


评论

也不是,原理其实是利用云变量提前传输信息


听雨a听雨a

实际上就是一个云列表和一个云变量,更新速度快的那个使用云变量分解开的,数据一旦多了就会崩溃。

点赞0


评论

加一个信息前缀

无论什么操作云变量的字符都限制在1024个

准确是:1024*(1/网络延迟) 字符/秒

一个是空间,另一个是时间,是不能一起算的

可以,

来我的主页第5作品

只需要一个 编号

你这个不准确,如果向变量内写入数字类型的数据,长度会被限制,你可以试试

比如向变量写入123456789012345678,你会发现写入的数据成了123456789012345680,说实话感觉这像是一个官方的bug,而且k3k4都有

hh

那么我自己做一个十进制不行吗()


𝙲ℴ𝗌𝔦𝒹ₑ𝑟𝙲ℴ𝗌𝔦𝒹ₑ𝑟

说实话(这种技术只用4块搞定

直接开源()要50赞干嘛()

点赞0


评论

你确定??你可以试试

作品早就开源了,自己去看看代码吧

4块是吹的()10块得有

你是不了解kitten积木块的特性啊,积木块和积木行数不是一个概念,积木块指实现代码需要的积木(包括执行积木和参数积木),而行数是实现代码需要的行列数,这两个不是一个概念

)别在意那个

4(1)年老玩家怎么能不知道呢()

临时编的

细节没注意太多


𝙲ℴ𝗌𝔦𝒹ₑ𝑟𝙲ℴ𝗌𝔦𝒹ₑ𝑟

虽然本质一样,但是精简center_image

点赞0


评论

下面有几项填错了))别在意

虽然你这个代码写入更简洁,但如果需要调用函数的话比我那种要麻烦,比如需要添加到列表的最后一项时,就得先获取列表的长度,然后将长度+1项设置为操作项

实质是一样的,只不过你的是方便编写初始程序而不方便调用,我的是方便调用而不方便编写初始程序

如果调用的次数特别多,用你这种方法可能会感到有些麻烦

而且还有删除的时候只能删除一项,不能删除全部

况且你这个基础代码。。。也没加更新判断啊。。。

我的代码都有更新判断(指云变量更改时会自动更新)和初始获取(指第一次进入游戏后获取在进入游戏之前的内容)

外出去了,2小时后见


源码心仪qfjj源码心仪qfjj

点赞0


评论


酳飞酳飞

nb

点赞0


评论


玛卡巴卡126玛卡巴卡126

666

点赞0


评论


鱼丶鱼丶

哪止0.5-1,实测有3-7

点赞0


评论

是的

但不同设备不一样,况且传输的数据也会影响

对的

包括作品大小+作品运行量+外界(其他应用)因素


无敌小jo无敌小jo

真好用imgsrc="https://static.codemao.cn/emoji/codemao/%E7%BC%96%E7%A8%8B%E7%8C%AB_%E7%82%B9%E8%B5%9E.gif"alt="emotion_编程猫_点赞"

点赞0


评论


Asheep2333Asheep2333

感谢贴主 爱来自贴主

点赞0


评论


KenHanKenHan

我想不明白的是 你的这种方法和直接用公有云变量传输数据有什么区别?

点赞0


评论

直接用公有云没法存储信息而且传输信息长度有限制


爷要吃小孩火锅爷要吃小孩火锅

挖坟,赞

点赞0


评论


爷要吃小孩火锅爷要吃小孩火锅

重复执行要等待的问题我已经解决了:)

点赞0


评论