这两年卡牌放置手游还是在市场上还是比较受欢迎的。这还要说一下20年大火的卡牌放置手游 剑与远征,该产品推出后迅速爆红,广告铺天盖地。显然这些铺天盖地的广告还是很有效果的。剑与远征自20年1月份在中国上线后其收益已经达到了8830万美元。也就是从那一刻起,市场上的卡牌放置手游就开始遍地开花了。都想分一杯美美的羹。 直到现在,还是有不少出名卡牌放置手游,这里就不一一赘述了。
卡牌放置手游 主要抓的就是年轻人的闲暇时间,利用碎片化的时间,换来最大收益值。既然是利用闲暇时间、碎片时间那就不得不提下卡牌放置手游的游戏特点了。
卡牌放置手游的特点呢就是:挂机、加速、跳过、回放。忙的时候可以挂机、时间比较紧的时候可以跳过、平常比较闲暇的时候呢可以加速观看战斗。在真正没时间的时候玩的时候呢,可以通过观看别人的战斗回放,快速的了解关卡的弱点。以最小的时间成本、得到最高的游戏体验。
很显然卡牌放置手游最重要的就是 挂机、加速、跳过、回放。
鉴于这几点呢,所以我们选择使用帧同步技术来实现卡牌放置手游。为什么呢?因为帧同步在实现回放的问题上更加简单,在战斗逻辑上更加靠谱。众所周知,帧同步的特点就是 相同的时机+相同的输入=相同的结果 刚好卡牌放置手游的战斗就类似于此。
一般大部分放置卡牌手游的战斗方式都是 开始战斗时输入英雄数据和一些其他相关数据,然后跟据英雄属性计算出手顺序、释放技能时机等。过程中整个战斗表现完全都是本地的,在整个战斗运算和表现结束后,找服务端校验一下战斗结果,并且领取奖励。
在这种的战斗机制下,帧同步相较于其他同步方式就拥有更加稳定的战斗运算。因为帧同步是基于定点数的,所以当我们输入的英雄数据是一致的情况下,无论开始多少次战斗,整个战斗的过程、出手顺序、技能释放、怪物死亡、战斗结果等,永远都是一致的。不管是战斗,还是回放,我们只需要一组英雄的数据即可模拟整场战斗。在客户端、服务端逻辑公用的情况下,能做到100%的结果一致性。
所以这就是帧同步的优势,不管是什么战斗,其实都是一组英雄数据。不需要记录任何时间节点的数据、状态等,也不需要记录某个时间点、触发的某些事件、操作来实现回放。我们需要的只是10个英雄的属性数据。能够以最小的数据体,实现战斗和回放功能。这也能更好的体现出游戏的流畅性。
顾名思义就是对帧数加以合理的控制,来实现在不同设备上,帧数一致的情况。
前一篇文章有详细的介绍过帧同步技术《铸梦之路一》:帧同步介绍
随机种子也不难理解,就相当于一个定点的随机数。定点数的核心就是准确、不会产生误差。 随机种子其实就是给与随机数一个
固定的基准值,有了随机种子之后,后面随机出来的所有随机数都是基于这个固定的基准值进行计算数值的,所以说后续的所有值都是具有统一的规律的。那我们战斗中,只要在战斗开始时把随机种子保存之后,在进行战斗回放的时候,输入该随机种子,在随机种子都一致的情况下,我们就能随机出和该战斗一致的随机数。
《铸梦之路一》:帧同步随机种子
定点数是什么?
定点数就是小数点固定、并且能同时表示小数和整数的一种自定义的数值结构体。
定点数的原理
通过一个放大因子,放大原本的数值,直接裁掉后剩余的小数,然后通过整型数值之间的计算,得到无小数点运算的结果。
这种结果是稳定的,准确的。因为其中没有小数点的浮动性。所以在不同的平台上结果都是唯一的、准确的。
为什么要使用定点数?
这就要问浮点数的特性了。
浮点数是指一种既包含小数又包含整数的数据类型,在计算机中用以近似表示任意某个实数。既然是近似,那就说明充满着不确定性。在加上整数后面可能会跟多位小数,小数越多,误差越大,在不同的平台上,非常容易产生不同的结果。
而定点数是基于整形进行运算的,能过保证我们在不同平台的输入相同时,得到的结果是一致的。所以要使用定点数。
逻辑渲染分离其实和UI表现与逻辑分离比较类似,但前者的逻辑,不仅是逻辑代码,还包括逻辑帧,逻辑帧一帧的时间是固定的,由程序指定的。所以和Mono的Update跑的帧数是不一样的,一般来说基本都是逻辑帧跑纯逻辑,渲染帧跑渲染,进行预测、缓动等操作,保证画面渲染的流畅性。逻辑与渲染分离的情况下,像这篇博客讲的卡牌放置游戏,这种游戏就可以客户端、服务端公用一套战斗逻辑,因为战斗中涉及到各种战斗数据、技能数值、buff数值的计算,所以一套逻辑运算对于结果而言,是最稳定的。
《铸梦之路一》:帧同步逻辑渲染分离
TODO
TODO