简析CCMoveToのCCMoveBy-cocos2d学习录

来源:互联网 发布:php二次开发ecshop 编辑:程序博客网 时间:2024/05/17 01:22
原文地址:简析CCMoveToのCCMoveBy-cocos2d学习录作者:传奇郭涛
    刚刚接触cocos2d不久,还处在摸索阶段,这也是第一次将自己的学习记录成博客的形式,作为初学者理解可能不到位,还请高手指点!

    废话不多说,言归正传。。

    从名字上看CCMoveTo与CCMoveBy很相似,对于新手来说如果不仔细的话很容易将两者混淆。正如苹果官方的开发文档一样,cocos2d中函数的命名也是体现功能。

    CCMoveTo是“移动到这里”;而CCMoveBy则是“相对于之前点再移动”,通俗一点就是说这里需要两个坐标pos1(x1,y1),pos2(x2,y2),如果是CCMoveTo的话,就是将对象由pos1移动到pos2,而CCMOveBy则是说对象的终坐标是在pos1的基础上再加上(矢量相加)pos2,终坐标pos3=pos1+pos2。这样说应该就很容易理解了。。

    下面来看一个例子:

-(void) runRandomMoveSequence:(CCNode*)node
{
float duration = CCRANDOM_0_1() * 5 + 1;
CCMoveBy* move1 = [CCMoveBy actionWithDuration:duration position:CGPointMake(-180, 0)];//实现横坐标-180
CCMoveBy* move2 = [CCMoveBy actionWithDuration:duration position:CGPointMake(0, -180)];
CCMoveBy* move3 = [CCMoveBy actionWithDuration:duration position:CGPointMake(180, 0)];
CCMoveBy* move4 = [CCMoveBy actionWithDuration:duration position:CGPointMake(0, 180)];
CCSequence* sequence = [CCSequence actions:move1, move2, move3, move4, nil];
CCRepeatForever* repeat = [CCRepeatForever actionWithAction:sequence];
[node runAction:repeat];
}

-(void) addRandomThings
{
CGSize screenSize = [[CCDirector sharedDirector] winSize];

CCSprite* firething = [CCSprite spriteWithFile:@"firething.png"];
firething.position = CGPointMake(CCRANDOM_0_1() * screenSize.width, CCRANDOM_0_1()*screenSize.height);
[self addChild:firething];
[self runRandomMoveSequence:firething];
}

    这里第一个函数定义了四个动作,注意到动作是通过CCMoveBy来实现的,第二个函数在屏幕范围内随机的位置生成一个精灵,然后调用上面的动作,这样精灵就会围绕一个正方形循环运动,先向左移动180像素,再向下移动180像素,向右移动180像素,最后向上移动180像素。。如此往复、

    如果将CCMoveBy改为CCMoveTo,精灵就会先运动到(-180,0)的位置上,再运动到(0,-180)的位置上。。。

原创粉丝点击