- 博客(14)
- 收藏
- 关注
原创 帧同步的开发笔记--P6.表现同步
但死亡的时间点可能有时间上的误差。我们不应该也没必要在逻辑step的时候直接进行状态同步,毕竟我们的逻辑是在每一帧的update中执行的,在一个单线程的游戏中,你可以认为这个update其实是个原子的,这就意味着无论在update中推送任何展示的变化,中间步骤的修改都不会应用到我们的渲染上,只会认最后一次变化。这个和情况3很类似,但区别在于,这个特效是我们的角色,这个东西并不是一次性的,而且因为设计关系,我们的角色动画可能会进行频繁的切换,而且我们的角色动画是有一个类似于状态机的东西来进行动画状态管理。
2025-07-21 18:02:48
448
原创 帧同步的开发笔记--P5.逻辑问题(1)
例如,我们设计了一个提高供给了114.514%的buff,那我们可以约定,逻辑的基础数量单位是0.0001,所以在存储和配置的地方,这里的数值可以设置为1145140(不过通常来说,策划肯定还是希望直观地使用114.514%来表示,所以在获取了配置后,可以由程序自己去进行一个数值转换),在计算后再按照统一的取整规则,这样就能数值的一致性。不过,为了不在之后重新提及逻辑上的一些问题,因此,在和大家聊客户端逻辑数据与客户端展示的同步之前,我先将纯逻辑数据上的帧同步问题中会遇到的问题和注意事项进行一些讲解。
2025-07-17 15:37:08
617
原创 帧同步的开发笔记--P4.同步流程(下)
需要注意的是,虽然我们认为当前游戏帧是服务器推送的帧,但为了游戏流畅性以及无法避免的服务器延迟,服务器很可能收到了当前关键帧以后的客户端操作。由于权威帧之前的所有状态已经是不会再改变的既定事实了,那客户端收到其他客户端的操作后,只需要按照顺序将所有操作按照一个确定的排序顺序,重新排列后,再将这些操作应用一次后,就可以了。同时,这也意味着,如果我们有任何试图去修改权威帧之前的操作(例如,网络问题导致某些权威帧之前的操作,在确定了权威帧之后才收到),那这些操作都应该被认为是非法的,需要被丢弃。
2025-07-16 17:44:26
585
原创 帧同步的开发日记--P3.同步流程(上)
(比如,我在第114帧进行了发射子弹的操作,击杀了一个怪物得到了514分,但经过服务器的消息广播,却发现对面在110帧的时候,就已经进行发射子弹的操作,并且击杀了这个怪物,那我自己的操作就相当于打空了)所以我们就需要将我们的游戏状态回滚到第一个与服务器不一致的地方。不过实际上,由于不是所有东西都是游戏状态数据,有些可能只是我们的一些缓存,有些可能是一些解析后的常量配置,而且在编写的时候,我们很可能并非一个单独的数据中心,而是由大量的逻辑实例组成的,而每个实例自己持有了描述自身的关键数据。
2024-10-30 12:24:40
1695
原创 帧同步的开发日记--P2.概念
作为一个从业十多年的菜鸟来说,个人认为游戏的表现上本质上就是在播幻灯片,之所以大家觉得游戏中的角色什么的能够很自然流畅的移动,是因为人眼本身的特性,导致当幻灯片快到一定程度后(没记错的话是0.05秒)人眼就不太能分别不出画面的突变,也就不会认为自己看的是幻灯片了。我们以王者荣耀为例子,所有英雄的状态(例如血量,蓝条,技能等级,CD,buff等等),所有野怪的状态,防御塔的状态,都是我们一帧中的游戏状态。也就是说,你的游戏可以是一个180FPS的超级丝滑的游戏,但逻辑可以是15FPS的低刷新率游戏。
2024-10-23 15:42:10
332
原创 帧同步的开发日记--P1.同步
优点,客户端只需要统一了初始状态后(这个可以由服务器提供,也可以客户端自己配制),通过上行输入(操作)给服务器,然后服务器再将操作广播给所有客户端,只要保证了客户端收到了同样的操作,那么就可以让所有客户端的游戏流程都是一样的,以此法实现同步。所谓帧同步,用比较数学化的说法就是,我们的游戏状态可以认为是x,而逻辑对状态的影响为一个函数f,然后在每一帧中进行计算后,如果没有任何发生任何改变变化的事情,那新的状态y就是由老状态得到的,也即是y = f(x),并且这个新的状态是一定的,确定的,且与机器无关的。
2024-09-30 21:20:08
726
原创 使用cocos2dx实现碎片炸裂 P4 (碎片的3D翻转)
上一章中,我阐述了如何通过设置双面纹理,来更简单的实现碎片的三维旋转的表现。但是,如果你按照我所写的内容自己操作一遍,你会发现表现会有严重问题。碎片旋转的表现很怪,准确来说,应该是碎片绕着一个奇怪的轴在旋转。如果我们对每个碎片,使用单绕一个轴,或者一个点去旋转。本章内容,不是特别严谨,因为矩阵运算与图形形变之间的对应关系,我还不能像喝水一样张口就来,所以内部设计的数学运算与作法,我并不能很好的进行解释。但是经历过代码测试,算法和代码的正确性还是可以保证的。毕竟我只是一个被A打头大厂认为对cocos2dx
2021-03-12 16:40:38
452
原创 使用cocos2dx实现碎片炸裂 P3 (翻面与双面纹理)
在前两节中,我们已经可以将一块儿纹理肢解成很多个多边形的方式来实现纹理的碎裂。但我们的纹理现在只能实现平移,显然正常来说碎片炸裂开,除了水平上的位移以外,最起码也还应该有一个朝某一个方向的自转吧。通常来说,我们可以用setScale的方式,来表现一个2D图形,绕着平行于所在平明的任意一条直线的一个翻转(当然对于进阶一点的开发人员,会使用OrbitCamera)。不过有一个很关键的问题,翻一圈以后,你的纹理并没有变化,而还是正面的纹理,这就显得不太合适了吧。所以这一节,我将分享一下如何使用cocos2dx
2021-03-09 14:12:08
1415
原创 使用cocos2dx实现碎片炸裂 P2(凹多边形的三角切割算法)(修订1)
上一章虽然已经能够将纹理碎片化,但是也说了,因为算法关系,简单的固定一条边,然后依次匹配第三个顶点的作法是无法适用于凹多边形的。作为一个阿里眼里的菜逼,之前想着这个算法应该很简单,结果网上的各种引用来引用去,也没说个清楚,所以我自己将算法设计出来并实现了。本章将说一说如何“肢解”凹多边形。注意,这里仅仅是凹多边形,而不是本身就都是洞的复杂多边形,肢解那种多边形的算法更加复杂。因为单是描述方式就已经和无洞多边形的不一样了,而目前我也只有一点想法,所以未来实现出来再说吧。回归正题。相信有兴趣来看这.
2021-03-01 14:49:53
743
2
原创 使用cocos2dx实现碎片炸裂 P1
前段时间玩了《弹丸论破》,觉得游戏内那个指出矛盾时出现的玻璃破碎效果非常酷炫,然后嘛,作为一个资深但是却被阿里认为对cocos2dx不熟悉的程序员,自然就产生了一个,我能不能用Cocos2dx也做一个碎裂化的效果呢?那今天小编带你们来尝试一下(吖屎吧,盗文章的傻逼们)由于cocos2dx的精灵都是矩形的,所以为了讨论简单,这里我们用矩形的图来进行说明,方便大家理解。另外,由于本blog是在完成了最初步骤后,顺着灵感写的,所以内容都还比较简单,因此目前设计的所有的碎片的切痕都是直线,毕竟砸碎.
2021-02-26 14:24:14
2360
原创 Cocos2d-x 事件分发器,SceneGraphPriorityListeners中存在的顺序错误问题。(3.6.1版本)
本文章基于cocos2dx 3.6.1版本(我们的项目开发版本)与3.17.2版本(我外网用于演示的版本,由于该版本已经对相关问题进行了修改与支持,所以该版本不需要进行相应的操作)首先需要简单说明一下Cocos2d中的事件监听器的添加有两种FixedPriority与SceneGraphPriority。前者为自定义的优先级,后者为基于渲染层级的优先级。一个事件按照怎样的顺序去发送,有兴趣的可以自行研究源码,多的就不说了。了解本文场景,只需要知道SceneGraphPriority.
2020-10-13 22:15:34
334
原创 cocos2d-x 多触碰吞噬实现
对于单触碰事件的吞噬,相信大家都知道,其他地方的博客也写了,简言之就是通过将onTouchBegan中的返回值返回true,将事件不再推送给后面的监听者来进行“吞噬”的实现。但是多点击事件呢?很扯的是,网上没有任何文章有写,最起码百度这种水货搜索引擎是搜不出来的。更扯的是,询问了官方人员,官方人员也只是给了一个答非所问的解决方案。那么具体该怎么做呢?在研究了一下午源码后,终于找到方法了。那么小编今天就给大家简单介绍一下(来啊,营销号们,来互相伤害啊)首先定义一个多点触碰的事件监听器(这都不会,洗洗睡
2020-05-25 18:36:30
378
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人