摘要: 链接一些制作android,ios游戏,cocos2d-x,box2d等比较不错的网址博客链接(不定期更新) 因为cocos2d-x是从cocos2d发展过来的。 所以cocos2d的学习资源比较多,cocos2d-x的相对比较少,大部分2d-x的文章也只是把cocos2d的代码翻译成c++而已 api基本是一样的,也就是语言的oc与c++的差别。所以学习上是互通的,资料也是共用的~~ 仅仅只是个人学习期间经常光顾的比较不错的网站和博客,比较有限,如朋友们有比较不错的,欢迎推荐和提供,做一种积累收集,供更多学习cocos2d的朋友们以方便 阅读全文
posted @ 2013-07-28 10:09 酷小卡 阅读(403) 评论(0) 推荐(0) 编辑

现如今,网络同步的技术在各种游戏里被广泛应用和发展,那么,如何在Unity中搭建网络模块?如何使服务器和客户端之间通信?如何做到网络同步?本文作者烂笔头-27将从自身经验出发,为大家一一解答这些疑问。

系列回顾:手把手教你实现Unity网络同步

八、物理碰撞的网络同步

写完上一篇文章之后,在Q群有一位朋友提了一个问题,在这个网络框架下,无法正常处理物体与物体之间的碰撞,经过测试以后,发现确实会出现这样的情况,如图:

<ignore_js_op>


可以看到,在客户端物体(蓝色立方体)移动,然后碰撞到服务器物体(红色立方体)时,由于服务器端的物体在客户端是滞后的,而客户端物体是本地预测的,当发生碰撞时,不能及时地产生碰撞反馈,所以导致碰撞的结果两端不一致,然后客户端就预测失败,产生很强烈的抖动和拉扯。这显然不是我们想要的结果。

那么如何来解决这样的问题呢?

1.思路

原因已经找到了,因为在客户端,客户端的物体是本地预测的,而服务器的物体是根据收到的状态包进行插值,两者在当前时刻,物理状态有差异,所以导致的碰撞异常,既然是因为服务端和客户端的物体,模拟的步调不一致导致的,那么可不可以在客户端去预测服务端的物体,使两者能够保持相同的模拟步调呢?

在GDC2018演讲 《火箭联盟》的物理与网络细节(需要科学上网)这个视频中,从37分22秒开始,演讲者演示了在《火箭联盟》中是如何做到在客户端对服务器的球的物理状态进行预测。

因此,在“巨人的肩膀上”,在之前的网络同步架构之下,做一点拓展,使在客户端预测服务端物体的物理状态。

2.模仿《火箭联盟》制作汽车(Car)和球(Ball)

新建一个预设Car,样子大概这样:

<ignore_js_op>


新建一个预设Ball,样子是这样:

<ignore_js_op>


为了让球(Ball)更像真实的球,给它添加带弹性的物理材质:

<ignore_js_op>


3.为汽车(Car)和球(Ball)添加控制逻辑,以及需要同步的网络状态。

汽车的控制代码:

<ignore_js_op>


球(Ball)不接收按键输入,只有需要同步的物理状态,物理状态跟汽车(Car)是相同的。

<ignore_js_op>


就这样,汽车(Car)和球(Ball)都创建好了,可以进行基本的碰撞同步检测了,效果如图:

<ignore_js_op>


可以看到,在汽车(Car)冲撞到球(Ball)之后,球发生了剧烈的抖动,接下来,就要解决这个问题了。

4.在客户端为服务器物体进行物理状态预测

在目前的同步框架下,服务器的物体在客户端是基于状态进行插值变化的。所以是滞后了,为了能在客户端预测它,我们可以创建一个假的球(DummyBall),然后把真正的球(ServerBall)隐藏(PS:仅仅是隐藏,同步逻辑还是一样的),这样,就可以做到

>汽车(ClientCar)不和ServerBall发生物理碰撞,只和DummyBall发生碰撞。

>可以在客户端对DummyBall进行物理预测,而不是影响ServerBall。

这可能有点绕,简而言之,就是为了在客户端预测服务器的物体,客户端创建了一个假的”欺骗”玩家,但不是真的欺骗,DummyBall在预测之前的物理状态必须是服务器下发的最新状态,DummyBall的代码如下:

<ignore_js_op>


然后客户端为自己(ClientCar)做预测的同时,也为DummyBall做预测,代码:

<ignore_js_op>


在汽车(Car)的执行操作指令的逻辑中,因为Physics.Simulate()是全局的,所以客户端预测执行一次,DummyBall也预测模拟了一次。

<ignore_js_op>


看看效果吧(蓝色车是客户端控制,紫色球是假球DummyBall,都是客户端做预测的):

<ignore_js_op>


可以看到,在客户端的预测下,汽车(Car)碰撞到球(Ball)时,产生了很及时的碰撞反馈,此方案可行。

再把真实的球(ServerBall)给显示出来对比一下(蓝色车是客户端控制,紫色球是假球DummyBall,都是客户端做预测的,红色球是ServerBall,是由服务器下发的状态包来做插值):

<ignore_js_op>


5.小结

通过创建DummyBall在客户端实现对服务器物体的物理预测,虽然感觉像是玩家在踢”假球”,但是可以换个说法,玩家是在踢”未来的球”,这样听起来就很Amazing了~

在不确定性的物理模拟和较高的网络波动环境下,这样的做法总会发生误差,为了减少误差带来的游戏体验,在带宽允许的条件下,可以尽可能的增加网络传输的频率,比如:20个包/秒,还有对数据流量进行压缩也很有必要。

来源:腾讯游戏学院
原地址:https://mp.weixin.qq.com/s/y7oa6eGkclI1NkcOOwplXA

posted @ 2018-11-28 10:07 酷小卡 阅读(434) 评论(0) 推荐(0) 编辑
摘要: 折叠菜单,用过jquery accordion的同学都知道是啥玩艺儿~,图片效果就是介样: cocos2dx不带有此控件,因此我们动手来实现一个。 原理很简单,展开的时候往listview里insertCustomItem,收起的时候从listview里removeItem。下面给出一个功能丰富的折 阅读全文
posted @ 2017-11-08 10:09 酷小卡 阅读(567) 评论(0) 推荐(0) 编辑
摘要: http://www.cnblogs.com/msxh/p/5790767.html 在上一篇博客中,我们一起学习了如何在Cocos2d-x中存储数据和读取信息,本篇博客我们将一起讨论和数据存储同样重要的联网技术。 一、弱联网技术介绍 在网络游戏中许多重要的功能都需要网络连接,而根据需要的不同,这些 阅读全文
posted @ 2017-03-12 11:19 酷小卡 阅读(855) 评论(0) 推荐(0) 编辑
摘要: http://blog.csdn.net/hjcenry/article/details/50530472 前段时间由于公司的一款弱联网游戏急着上线,没能及时分享,现在基本做的差不多,剩下的就是测试阶段了(本来说元旦来分享一下服务器技术的)。公司的这款游戏已经上线一年多了,在我来之前一直都是单机版本 阅读全文
posted @ 2017-03-12 11:04 酷小卡 阅读(8460) 评论(1) 推荐(1) 编辑
摘要: 在游戏开发中新手引导的设计、代码编写、测试需要花费较多的时间和精力,特别是测试验证,在反反复复的引导流程中点来点去,会让人有一种要崩溃的感觉。因此在想能否实现让计算机根据我们的新手引导配置,自动去跑我们的引导呢?答案是肯定的,请看下在的演示:手工执行引导,注意鼠标指针的移动。自动执行引导,注意鼠标指... 阅读全文
posted @ 2015-05-12 16:14 酷小卡 阅读(370) 评论(0) 推荐(0) 编辑
摘要: 上一篇讲解实现引导的组成模块及整个引导流程,并给出整个引导的源码及演示代码。本文来看看怎么应用。sz.Guide引导库已经可以简单地工作了,但离真实的游戏项目、使用场景时还需要自己做一些事情。进度读取与保存sz.Guide默认对进度的读取和保存,是记录在localStorage中的,请看如下代码:1... 阅读全文
posted @ 2015-05-12 16:13 酷小卡 阅读(886) 评论(0) 推荐(0) 编辑
摘要: 近期游戏准备出安卓版本,在安卓上的性能表现不佳。经过一周多的优化,在性能上取得了较大的提升。游戏采用Cocos2d-x 3.2 + Lua进行开发,以下将在渲染效率,CPU效率,包大小等方面进行总结。渲染效率纹理格式 – 运行效率 内存 包大小所有的图片都通过一个python脚本(调用Texture... 阅读全文
posted @ 2015-05-12 16:12 酷小卡 阅读(1425) 评论(0) 推荐(0) 编辑
摘要: 一、定位器的实现定位器的目的是实现对场景树中的节点精确定位,获取对象实例,从而获取节点在界面中的位置、矩形大小等信息。定位器:在Cocos2d(js)游戏引擎中用于精确描述场景树中的某一节点的字符串,其实现方式借鉴了css(层叠样式表)选择器设计思路,以下我们将实现一个简单的从定位器字符串解析到节点... 阅读全文
posted @ 2015-05-12 16:11 酷小卡 阅读(470) 评论(0) 推荐(0) 编辑
摘要: 想到新手引导的功能时可能很多人都会觉得头痛,难以下手。特别是在游戏本身功能或需求还不稳定的情况,更是难以应付,本人就是在这种情况下接受了一个艰巨的任务。在痛定思痛之后,开始了引导功能开发。在做的过程中一点点发现很多有意思的东西,想分享给大家。一、痛点:新手引导制作的难点及弊端需要在具有引导功能的代码... 阅读全文
posted @ 2015-05-12 16:10 酷小卡 阅读(794) 评论(0) 推荐(1) 编辑
摘要: 说明ErasableLayer是一个可擦除的Layer,可实现类似橡皮擦、刮奖等效果。原理是通过颜色混合实现的。关于颜色混合可查看这篇文章(点击查看)。测试环境:Cocos2d-x v3.3、Cocos2d-x v3.5源码下载:ErasableLayer.zip源码ErasableLayer.cp... 阅读全文
posted @ 2015-05-12 16:09 酷小卡 阅读(372) 评论(0) 推荐(0) 编辑
点击右上角即可分享
微信分享提示