从头开始学cocos2dx笔记之七(TestCpp之controler)

本文介绍了Cocos2d-x中TestController类的菜单系统实现方式,包括菜单项的创建、容器的使用及触摸事件处理。文章还探讨了如何通过ZOrder区分不同菜单项,并实现了菜单项点击后的场景切换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

TestController这个类继承自CCLayer,因此可以通过addChild函数增加各类菜单对象。在构造函数中,可以看到,类首先创建了右上角的关闭按钮,然后创造中间竖排的菜单组。代码:

CCMenuItemImage *pCloseItem = CCMenuItemImage::create(s_pPathClose, s_pPathClose, this, menu_selector(TestController::closeCallback) );

的作用是创建了一个图片菜单对象,但有意思的是这个对象不能单独使用,需要再创建一个CCMenu对象才能正确使用:
    CCMenu* pMenu =CCMenu::create(pCloseItem, NULL);

再往下看,程序通过1个循环,创建了多个CCLabelTTF对象,然后把这些对象都通过addChild函数,加入到一个CCMenu对象中。从这里可以看出,CCMenu是一个容器,包含多个菜单项。

观察一下CCMenuItemImage::create()函数的参数,前2个参数为字符串,指向在普通和被选择状态下的资源图片的路径,而最后一个参数则是一个选择器,即设置了该按钮的回调函数。这个字符串参数是一个C风格的字符串,没有用string。

CCLabelTTF::create()这个函数的参数是需要显示的字体、字符集名以及字体大小。这也是一个很强大的UI。

注意addChild()这个函数,第2个参数为zOrder,可有可无,但TestCpp显然没有把这个值当成zOrder的本意来用:用一个小技巧来分辨是点击了哪个Lable。

setTouchEnabled(true);这句代码开启接受触摸输入。

TestController通过重载处理了2个事件:ccTouchesBegan和ccTouchesMoved。

ccTouchesBegan 这个函数记录了初始触摸的位置,在ccTouchesMoved函数中,程序计算在Y方向移动的位移,然后根据位移计算并设置包含LABELs的CCmenu位置,从而实现整个菜单的移动效果。这大概也是为什么需要创建2个CCMenu,没有必要让close和其他菜单项共同移动。

那有个疑问是,cocos2dx究竟有那些触摸输入的接口呢?推荐看这篇文章:http://blog.youkuaiyun.com/ym19860303/article/details/8477567

显然,TestController偷懒,把2个不怎么用的触摸事件没有进行定义。。需要注意的是TestController里面没有涉及消息分发等函数,也没有处理类似点击之类的事件,就可以实现类似点击菜单的效果,因此,这部分的工作应该由引擎帮我们的完成了,我们只需要写一些特殊的事件处理代码并注册好回调函数就可以了。比方说TestController,2个重载函数的处理核心就是实现触摸移动时的菜单移动效果。

接下来再看看菜单组建的回调函数。

关闭按钮比较简单,CCDirector::sharedDirector()->end();这个函数用于结束整个程序。

在各个LABLE的回调函数中,我们注意到,程序利用ZOrder来判断点击了哪个Lable,然后创建对应的Scene,进入相关的场景。

那么,接下来就看看具体每个测试场景,都告诉了我们程序什么样的功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值