cocos2d-x萌新指南(五)——导入cocosstudio文件、获取控件

DinS          Written on 2016/4/22

第五话 神迹

“在我之前,显出那张着翅膀的美丽的影像,这是联合在一起的灵魂所构成,他们正欢乐于甜美的享受之中。”

——《神曲》天堂篇19:1-3

继续我们的旅程。上一话我们使用了cocosstudio这个利器帮助我们布局UI,那么我们如何将其导入程序中并使用呢?这是本话要完成的任务。

首先打开studio找到制作的内容(希望你存盘了 )点击文件->导出项目,弹出以下窗口:

一般来说不用改其中的数值,只要记住导出文件的位置即可。至于这些功能都是干什么的请查阅帮助。

之后找到文件所在地,你会发现如下的几个文件:

Resources就是在studio中导入的资源的存放地,打开Export会看到一个名为Example的文件夹,这是项目的名称,进入Example会发现三个文件,如果你注意到了我们布置的场景在画布列表的名字叫做Example_1就应该明白这是什么了。现在将整个Example文件夹拷贝到程序项目的resource文件下。最终效果如图:

完成这步以后便可以着手导入程序了。

如果你使用的是cocos2d-x 3.2那么需要进行额外的一步将cocosstudio库导入项目,更高版本的不用。具体如何导入看这篇搬运文章

http://blog.sina.com.cn/s/blog_1476b8ff50102wolp.html

首先新建一个场景(忘了的去复习 ),叫做Inf_map,作为地狱篇的选关场景。直接copy相关代码快速完成场景搭建。这里再次贴出代码当做复习,子曰:“温故而知新,可以为师矣。 ”

这里新建了一个场景类叫Infmap_Scene,我们看到.cpp中的初始化没有任何实质内容,这是为了清楚地展示如何导入studio的布置。

其次打开.h文件添加以下几个引用,同时输入如下代码:

解释一下,新引入的文件让我们能够使用cocosstudio的相关控件,因为studio中的控件与2d-x中的类型有区别,比如2d-x中的放置图片的类型叫做Sprite,而studio中叫做ImageView,所以要使用studio中的内容必须使用相应的类型。

.h中新加入的实质性内容就一句:新建了一个对象。Studio中的层叫做layout,这里就是建立了一个层,之后要在.cpp中将studio中的最底层导入这个Panel_root。

如果你问private:是什么,这还真不太好解释,你可能需要一本c++教科书,然后看看类一章。暂时理解为该场景里面的对象,并且以后要建立对象的时候都可以在private里面先定义。

现在进入.cpp文件并在init()函数中加入如下两句代码:

(大图点这里)

以上写法是固定格式,凡是想要导入studio的文件记住都这么写即可,其他要说明的已经注在图上了。注意整个.cpp文件中实质性的就这么两句,那么效果如何,赶快来试一下。把AppDelegate中的起始场景换成Infmap_Scene,这样直接调试该场景暂时不做场景切换。结果如下:

跟studio中的画面一模一样,恭喜你已经成功导入文件了。 这样确实是非常高效,完全不用一个对象一个对象地敲代码了。


但是任务才刚刚开始,现在你点击按钮不会有任何反应,因为没有获取对象并绑定函数,接下来进行这项工作。

返回.h中,先完成第一关的弹窗制作。仿照建立layout的方式再建立几个对象,包括:1个弹窗layout、1个关卡按钮button,2个弹窗上的按钮。这些都是在private区域。然后在public区域建立两个函数,一个用于显示弹窗,一个用于关闭弹窗。进入关卡的函数实际就是一个转场函数,之前已经掌握了,这里先忽略。具体写法如下:

新建的对象没什么需要解释的,是什么类型的对象前面就是对应的类型,比如btn_lv1是按钮控件,这里就用Button*,可能你会问*是什么意思 ,如果讲深入下去就会把问题复杂化,既然咱们是萌新指南就采取这样的策略:照着写即可。

再来看上面的函数,两个参数是固定用法,依然照着写,函数名自己起,只要便于区分就可以了,前面的void是什么意思呢?一个函数在执行完毕后可以返回一个指定的值或对象,如果什么都不返回就使用void。如果没理解没关系,都是从仿写开始的,看多了写多了自己就明白了、会用了。

再回到.cpp,完成具体实现。

第一步获取studio中的控件,如果是按钮则绑定函数。具体如下:

格式大同小异,该注意的都在图中标明了。解释一下整体的意思。不管是什么类型的控件,要获取的话首先需要给出控件所在的层,然后在该层按照控件名称获取该控件,这也是为什么强调studio中改名的原因。一般来说建立的对象和studio中控件名称最好保持一致,这样不会搞乱。特别注意层的问题,如果控件较多会采取复制的方式获取,然后分别改一下名称,这样特别容易忘记改控件所在层的名字,于是编译时就悲剧了,还特别不好查。

按钮控件还需要绑定一个函数,这样点击时就执行该函数,整体语法跟2d-x提供的按钮差不多。

完成控件获取后开始真正的实现功能,留待下一话解决,见《cocos2d-x萌新指南(六)——制作弹窗》。