小for的Cocos2d-x学习笔记与感悟2之基本控件使用(1)

来源:互联网 发布:博拉网络招聘 编辑:程序博客网 时间:2024/04/29 23:19

 

本来想在本笔记前加入对HelloWorld这个框架的理解的,看了看,引擎自身提供的注释很完善了,而且一看就明白,所以就去掉那个了。

本文小for原创,转载请注明出处。

小for会在这篇博客中记录Cocos2d-x基本控件的使用,只记录CCSprite、CCLabelTTF、CCMenu三个,下一篇中会再记录三个,剩下的就用到的时候再去找度娘和谷哥了。

其实,这三个控件在HelloWorld中都已经使用到了,小for只是在这里梳理一下,下面的记录中将会忽略HelloWorld代码。所以,第一步,在新建的mHelloWorld中删除HelloWorldScene中init函数中的代码(说得好复杂…),让HelloWorld::init()变成下面这样

bool HelloWorld::init(){return true;}


这时候调试运行的话,会是黑压压的一片:

既然在这里删除了,就得从这里再加回来,CCSprite和CCLabelTTF的代码都在init中实现,CCMenu部分不是。

1、 CCSprite

顾名思义,这个控件就是显示和控制一个精灵的,小for现在看来,一个精灵实际上就是一张图片。

先看代码

//声明CCSprite对象,并为其指明图片对象为cocos.jpgCCSprite *sprite=CCSprite::create("cocos.jpg");//设置sprite的位置,左下角是坐标原点sprite->setPosition(ccp(0,0));//设置锚点位置为(0,0),即cocos.jpg这张图片的左下角sprite->setAnchorPoint(ccp(0,0));//加入到当前CCLayer中this->addChild(sprite);

以上代码就把这张图片加载进去了

图片资源是这个,另存为可以使用哦

通常,加载一个精灵只需要加载图片—>设置锚点(可选)—>设置位置—>addChild(可以指定)就可以了。在Cocos2d-x中,所有的设置位置都必须在坐标前加上ccp,就像上面的代码一样ccp(0,0)表示坐标原点,向左和向上为坐标轴正方向。坐标点是一个CCPoint对象(其实点都是),如

CCPoint point=sprite->getPosition();

可以得到sprite的坐标位置。

既然加入了,那肯定就能移除,嘿嘿:

this->removeChild(sprite,true);//后面一个bool参数是选择是否clean这个对象

基础的东西就这些,以后会和Action、Box2D等连接起来,到时候再看。

2、 CCLabelTTF

CCLabelTTF的使用其实和CCSprite非常相似了,因此,小for的笔记就比较简单。这里先获取屏幕大小,然后将CCLabelTTF放到屏幕正中间。具体实现如下

//利用导演类取得图片大小CCSize size=CCDirector::sharedDirector()->getWinSize();//声明CCLabelTTF对象,三个参数分别为lable内容、字体、字号CCLabelTTF *lable=CCLabelTTF::create("Hello My Cocos2d-x World","Arial",24);//屏幕正中间位置CCPoint pos=ccp(size.width/2,size.height/2);//设置位置lable->setPosition(pos);     this->addChild(lable);


 

效果图将会如下

这里小for们注意到,小for们没有设置锚点,且文字居中了,说明控件(All)默认的控件正中为锚点。另外,文字在之前图片的上方,说明后加载的控件会覆盖之前相同位置的图片,实际上,小for们在addChild     的时候,可以设置层数,例如

this->addChild(sprite,2);会覆盖掉与this->addChild(sprite,1)想重合的部分。

还有一点,此处的CCLabelTTF貌似暂时不支持中文,这里很纠结,上次做课程设计的时候,小for全部文字都是用的图片,看了网上的一些方法,暂时还没有解决。等有空了好好了研究下,弄成一个通用的方法给大家直接调用!大家如果弄出来了也共享给小for用下哈!

3、 CCMenu

相对于前两者,CCMenu就相对要复杂一点了,不过很容易理解它嘛,毕竟它已经涉及到“事件”了。CCMenu实际上就可以当作Button使用了,并且在按键响应上做得比Android应用开发好多了(Android使用selector,代码量忒大)。

首先,小for们需要在init中声明这个对象,并为它设置一些内容:

//声明一个CCMenuItemImage,并放到CCMenu中//声明CCMenuItemImage对象,四个参数分别为点击前图片、点击后图片、上下文对象(^-^)、回调函数CCMenuItemImage *btnImg=CCMenuItemImage::create("CloseNormal.png",        "CloseSelected.png",this,menu_selector(HelloWorld::menuCloseCallback));//取得btn的大小CCSize bSize=btnImg->getContentSize();//取得btn的height的一半bSize.height=bSize.height/2;//得到lable下面刚好放下btn的点CCPoint pos2=ccp(pos.x,pos.y-bSize.height);         CCMenu*  btn= CCMenu::create(btnImg, NULL);         btn->setPosition( pos2 );this->addChild(btn);


 

然后小for们需要在HelloWorldScene.h中声明回调函数,并在HelloWorldScene.cpp中实现。

    .h文件中

void menuCloseCallback(CCObject* pSender);

    .cpp文件中(不是init中哦)

void HelloWorld::menuCloseCallback(CCObject* pSender){   //点击时执行如下这里}

 效果会是这样(点击有惊喜,嘿嘿)

耶!正文完成了,六点过了,差不多该去吃完饭了,小for最喜欢的就是吃了^-^。今天还是听热情的,一下子发了两篇博文,虽然都是最基础的内容,却是很有用的哦。上午一学弟知道小for在学习Cocos2d-x的时候建议小for不要学习游戏(因为小for的数学不大好,实话),但是,根据这段时间来小for对游戏开发的理解,基本的开发还是不需要微积分那些高等数学的知识的,何苦,就算真的遇到了也可以找一些大师问问嘛,就算去学那几个知识点也可以啊。菜鸟拙见,小for觉得做这事还是需要有信心的,小for已经做好迎接问题的准备了!小for在这里祝大家周末愉快哦,同时也在这里谢谢学弟的提醒。

【博文没时间修改了,有问题大家见谅哈!】

原创粉丝点击