由于工作需要,这几天需要研究下cocos2d-x,貌似有好久没学机器学习了= 。=!
首先要做的是准备工作:把精灵的图片添加到工程中,在visual stadio2010下如图所示:
然后选择你需要的精灵图片,添加就完成了。
创建过程如下:
CCSize winSize = CCDirector::sharedDirector()->getWinSize(); //返回界面的size,有两个属性width和height,界面的原点在左下方 CCSprite *player = CCSprite::create("Player.png", CCRectMake(0, 0, 27, 40) );//创建精灵,create的第二个参数表示图像中对应的像素矩形 player->setPosition( ccp(player->getContentSize().width/2, winSize.height/2) ); //设置位置点 this->addChild(player);//把精灵加到当前图层中
精灵的添加主要分下面四步(cocos2d-x中大多数组件的添加都是这四步)
1、通过create创建精灵对象,返回对象的指针
2、检查下对象是否创建成功,cocos2d-x中有一个宏,可以这样用 CC_BREAK_IF( ! sprite );
3、设置精灵对象的坐标,这个坐标是opengl坐标,原点在左下角
4、把相应的组件加到图层中
CCRectMake(int x, int y, int width, int height)这个函数解释下,四个参数分别为矩形左下角的坐标和它的宽度和高度
这样精灵就添加完成了,接下去是精灵的移动。
首先需要设置一个定时器
this->schedule( schedule_selector(HelloWorld::gameLogic), 1.0 );void schedule (SEL_SCHEDULE selector, float interval)
两个参数分别是需要调用的回调函数和回调函数响应的时间间隔。
这个函数需要在图层init函数返回前设置完成。
精灵的移动代码如下:
CCSprite *target = CCSprite::create("girls.png", CCRectMake(32*0, 48*0, 32, 48) ); CCSize winSize = CCDirector::sharedDirector()->getWinSize(); 。。。。。。。。。。。 CCFiniteTimeAction* actionMove = CCMoveTo::create( (float)actualDuration, ccp( winSize.width/2, actualY) ); CCFiniteTimeAction* actionMoveDone = CCCallFuncN::create( this, callfuncN_selector(HelloWorld::spriteMoveFinished)); target->runAction( CCSequence::create(actionMove, actionMoveDone, NULL) );
CCMoveTocreate它时两个参数分别是移动的时间(单位是秒)和移动终点的点坐标。移动这个动作时继承与Action类的,这个类是CCFiniteTimeAction,MoveTo::create它时两个参数分别是移动时间(单位是秒)和终点坐标。然后再设定移动时的回调函数CCCallFuncN::create(Object *,SEL_CallFuncN)两个参数分别是调用回调函数的对象指针和回调函数指针。
最后调用 精灵对象的runAction(CCAction *)函数,CCSequence::Create参数分别是CCFiniteTimeAction表示不同的动作,这个参数是可变的,只需要把动作加进去就行
另外需要注意的是:在cocos2d-x中,所有的组件比如,精灵,布景层,场景,label,动作都是创建在堆中的,所以调用时必须用->来调用
回调函数有五种,分别是:
定义在 cocos2dxincludeselector_protocol.h中
schedule_selector
callfunc_selector
callfuncN_selector
callfuncND_selector
menu_selector
根据不同的需要来选取不同的回调函数类型