您的位置:首页 > 移动开发 > Cocos引擎

cocos2d实现精灵在屏幕上随机的运动

2013-03-20 10:25 357 查看
继续进行cocos2d的学习,每天学到一点东西都有一点小成就感,这个小问题困惑了我很久,不过好在我解决了它

下面来看看代码的片段吧,希望对你们有所帮助

-(id)init
{
    if(self = [super init])
    {
        //在这里面声明精灵类,定义精灵初始位置,并加入层中
       for(int i = 0 ; i<numberOfBalloon;i++)
       {
          //声明精灵
          CCSprite *ballon = [CCSprite spriteWithFile:@"balloon.png"];
          //定义精灵的初始位置
          ballon.position =CGPointMake([ballon texture].contentSize.width*i+
                                   [ballon texture].contentSize.width*0.5f,-
                                   [ballon texture].contentSize.height);
          //将精灵添加到层中
          [self addChild:ballon z:0 tag:2];
          //把精灵都添加到数组中,因为我这里是需用到多个精灵
          [ballonarray addObject:ballon];
       }
       [self scheduleUpdate];
    }
    return self; 
}

-(void) update: (ccTime) dt
{
    for(int i=0;i<[ballonarray count];i++)
    {
       //遍历数组中的精灵
        CCSprite *ballon = [ballonarray objectAtIndex:i];
        //如果没有精灵运动的话就执行下面的语句
        if([ballon numberOfRunningActions]==0)
        {
            CGSize size = [[CCDirector sharedDirector]winSize];
            //定义精灵的位置为随机位置
            CGPoint position = CGPointMake(size.width*CCRANDOM_0_1()
                                           -ballon.contentSize.width/2,
                                           size.height*CCRANDOM_0_1()
                                           -ballon.contentSize.width/2);
            //限制精灵的运动范围不让其出界
            if(position.x<ballon.contentSize.width/2)
            {
                position.x = ballon.contentSize.width/2;
            }
            if(position.y<ballon.contentSize.height/2)
            {
                position.y = ballon.contentSize.height/2;
            }
            float time = ccpDistance(position, ballon.position)/speed;
            //表示在time这个时间段内移动到position这个位置,因为是在update中运行的
            //这个方法,所以精灵会一直的重复这个动作,并且不会有明显的间断
            id actions = [CCMoveTo actionWithDuration:time position:position];
            [ballon runAction:actions];

        }
    }
}


还有一个问题就是精灵碰撞后会弹开,这个问题一直没实现,如果那位有类似的项目做过,欢迎交流
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐