昨天老师布置一个作业,实现一个小球移动的小动画程序,想着cocos2d很容易就可以实现,于是用cocos2d写着玩。精灵要移动有两种方式,一种是利用帧循环,一种是调用API:CCMoveBy或者CCMoveTo .首先简单的介绍这两个函数吧。
1、都可以实现精灵的移动到达指定地点,(第二个参数即表示目的地)
2、CCMoveBy是坐标的矢量相加,比如当前点是(x1 ,y1),你设置的参数坐标是(x2 ,y2) ,那么精灵会被移动到(x1 + x2 ,y1 + y2)坐标点上。
3、CCMoveTo就是把精灵移动到指定的点,简单粗暴。
介绍这两个函数的博文书籍挺多的,我写着也是顺带,下面我主要是想来个实例演示一下,提醒大家在使用时,一定要注意他们之间的区别。首先是CCMoveBy.
<span style="font-size:14px;">void LayerMenu::addCallBack(CCObject *pSend)
{
CCSprite *spr = CCSprite::create("bullet.png");
m_batchNode->addChild(spr);
m_array->addObject(spr);
spr->setAnchorPoint(ccp(0, 0));
spr->setPosition(ccp(0, 0));
CCMoveBy *fs = CCMoveBy::create(3, ccp(winSize.width - 18 , winSize.height /2));
CCMoveBy *ss = CCMoveBy::create(3, ccp(-winSize.width /2, winSize.height /2 - 18));
CCMoveBy *ts = CCMoveBy::create(3, ccp(-winSize.width /2 , -winSize.height/2 - 20));
CCCallFuncN *action = CCCallFuncN::create(this, callfuncN_selector(LayerMenu::bulletMoveFinshedCallBack));
CCSequence *seq = CCSequence::create(fs,ss ,ts ,action, NULL);
spr->runAction(seq);
}</span>
代码就是使用CCMoveBy实现小球的运动,效果如下图:
这里需要注意的就是第二个参数的问题,为什么第二个MOVEBY的第二个参数是负的?因为CCMoveBy是坐标的矢量相加,(记得矢量相加么?)这样才可实现上诉效果。
然后是CCMoveTo,这个我就没有写代码,理解了CCMoveBy的坐标变化,那么这个也不在话下了。
写下笔记,提醒自己在一些细节之处,一定要更加小心。