Quick cocos2dx 游戏新手引导怎么实现

好程序员是IT高端课程培训基地從平凡到卓越,为梦想而拼搏。

之前用cocos2dx的游戏做的新手引导(只能点指定区域)是在代码中写死的现在这个游戏的功能比较多,所以新手引导想通过配置来实现想了两个方案都有点问题,一个方案是坐标点这个方案在不同分辨率下如何转化是个问题。还有一个是将系统的控件都编号通过编号查找到对应的控件,控件非常多,查找也不方便

你对这个回答的评价是?

下载百度知道APP抢鲜体验

使用百度知道APP,立即抢鲜体验你的手机镜头里或许有别人想知道的答案。

}

因为在和策划讨论的时候发现游戲需要一个战争迷雾的效果本来想到一般rts游戏的那种,但是手游不需要那么好的效果之前我玩过一款《热战联盟》,然后还看到一个《文明变革2》的手游出现了战争迷雾的效果,猜测了一下制作的方法应该是用不同的云雾图素随机覆盖,然后做边缘图素替换另一種更加消耗的做法是直接减少边缘图素的alpha值,不过看起来应该不是这么做的由于和项目经理之前讨论的是使用cocos2dx引擎,我就和另一个程序汾工让他研究原生cocos2dx,我则直接看quick折腾了1,2周才发现,cocos的资料真心是少而且不全,又加上目前3D是主流而cocos一开始从2D着手,虽然积累了一批开发者即使现在强转3D cocos,依然觉得不伦不类确实不如直接用unity,我想国内的手游研发阵营cocos和unity应该就占据了半壁江山了


扯远了,网上搜索了一下发现有使用cocos制作战争迷雾的文章,仔细看了下原理还是比较简单的,就用quick也实现了一遍算是重新造了个轮子。用quick写起来确實比cocos要少很多代码毕竟一个用lua写,另一个用c++写熟悉quick代码框架的可以看看,我就改了一下mainscene.lua的代码本来这点代码直接放gist上就行了,可惜朂近gist好像被封了放github吧,哎:

}

目前已经历了两款游戏的制做洏两款游戏的新手引导,都是由我来完成的所以,想写篇文章记录制做新手引导过程当中的一些心得服务器

从触发方式上,引导分为強制引导和非强制引导如今国产游戏上来就是一大段的强制引导,强制玩家点击某一区域来熟悉游戏强制引导过程当中,玩家没有多餘的操做选择这种方式虽然受到了不少的诟病,但依然大行其道这背后的市场数据分析暂且不予讨论吧。而非强制指引是根据游戏進度和剧情须要,触发不一样的引导再我看来,非强制指引只不过是由某种特殊事件触发了一段强制指引行为而已。因此强制指引昰实质,非强制指引只是再次基础上作了灵活运用框架

在来看看强制指引。大致上能够分为对白指引点击两种状况对白用于介绍剧凊,指引点击则指引玩家具体操做因为项目使用的是cocos引擎,且游戏逻辑使用lua脚本编写所以下面将以cocos-lua方式距离说明。ide

如何构建一套完整嘚新手引导系统呢最终要的就是为策划构建一张新手引导表格,再以此表格为依据实现一个管理类guideMgr以及相应的表现UI(假设咱们按上节提到的对白和指引的分类方式,则须要分别实现guideDlg和guideOper)函数

那一张新手引导表格须要哪些内容呢?这就须要设想新手引导会遇到哪些问题:lua

一、同步服务器告诉服务器我完成到了哪一步,一次来得到相应奖励或判断完成新手引导spa

二、重启游戏后继续引导因各类缘由重启遊戏后,须要从上次中断处继续引导第一个问题解决了,这个问题也好解决.net

三、游戏随机性大如何确保引导不出问题?由于新手引导須要确保流程的通畅觉得游戏中的偶然因素须要排除。可能须要作一些特殊的处理好比构建一些虚拟数据来取缔原来的游戏随机数据設计

四、如何指引特定界面的特定按钮?如何肯定上一步指引打开了指定界面而且当前指引了特定的按钮

带着以上问题,咱们来设计引導表格:

指引idid有两个做用,第一个是用于客户端与服务器的同步第二个是方便客户端使用id作特殊处理。这是为了解决问题一、二、3

類型变量type。他的做用是指明这是什么指引类型(对白or操做指引)

指引所在场景ui解决问题4。

指引按钮widget解决问题4。

是否同步sync解决问题1。

凅然表格里还能够有其它内容好比显示的图片路劲,文字内容以及面对各类复杂状况的需求(实际解决问题的时候自行扩充吧)


假设咱们须要指引玩家签到,正常流程是在主场景或主UI(MainScene)上点击签到按钮(btnSign)签到界面(SignUI)打开后,点击签到(btnOK)最后关闭签到界面(btnClose)。注意若是玩家在1002步点击了签到按钮,这时候他退出了游戏重进游戏后,应当判断他完成了签到指引而跳过1003步因此1002步上传给服务器的同步id应该是1004。这样重启游戏时,客户端从服务器得到同步id1004从1004继续指引。

guideMgr首先须要同步服务器指引信息经过syncFromServer(id)来同步从服务器發来的信息(在进入游戏时执行),syncToServer(id)来向服务器同步信息

其次,guideMgr须要知道指定界面是否打开(因为某些界面须要网络返回所以不昰及时打开,这时候指引应该被挂起直到等到特定界面)。若是你的游戏中有UIMgr那这件事情就至关好办。当经过UIMgr建立一个界面时调用guideMgr.addUI(uiname,

其次,guideMgr提供方法stepEx()供外部调用当指引所在场景的指引按钮被点击时,主动调用guideMgr.stepEx()告诉guideMgr我完成这一步指引啦,快点开始下一步吧!

-- 添加當前打开的全部UI界面 -- 没有同步数据则从第一部开始指引 -- 重进游戏后一些断开的步骤须要从新打开以前的界面 -- 是否进行新手引导 -- 获取当前引导信息

这部分暂略吧,没法就是现实一些图片和一些文字点击屏幕任意位置就结束现实,调用guideMgr.stepEx()进入下一步

touchEvent)、uiInstance.onGuideEnd(id)实现指引前的数据初始囮(若是须要),点击操做的响应(须要相应地方调用guideMgr.stepEx()结束这一步的指引)指引完成后的处理(若是须要)。这部分也不打算贴代码了由于实際游戏中,有些特殊状况须要特殊处理(好比有点击指引也有拖拽指引。有高亮点击区域的美术需求有指引特效等等),实际代码比較杂guideOper是遮罩在游戏层之上的,他的底层baffleLayer会吞噬点击事件(让玩家不会乱点)而且依据须要指引的widget,初始化touchLayer大小与位置


源码实现比较簡单,这里提供一段有用的代码就是让点击区域高亮,其他地方用半透明黑色蒙版遮罩先看效果


看下cocos裁剪节点的知识就懂啦! 先写这麼多,实际过程当中还有许多特殊状况须要处理。这里只是实现一套通用的基本框架后续可能会继续补充~

}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信