2014-01-03 4 views
1

У меня есть спрайт-лист, который мне нужно оживить навсегда, и я хотел бы добавить его в качестве CCLayer к моей сцене. Позже, мне нужно переместить весь этот анимационный спрайт на экран. Так, например, у меня есть анимация собаки, идущей от листа спрайтов, эта бежит вечно. чем я хочу, чтобы иметь возможность перемещать эту собаку на экране во время анимации.Переместить весь лист спрайта анимации

Каков наилучший способ для этого? (Или правильный путь)

Это, как я анимировать кадры:

CCSprite *boom; 
    boom = [CCSprite spriteWithSpriteFrameName:[NSString stringWithFormat:@"%@_00000.png",file]]; 
    boom.position=touch; 
    [self addChild:boom]; 


    NSMutableArray *animFrames = [NSMutableArray array]; 
    for(int i = 0; i < 5; i++) 

    { 

     CCSpriteFrame *frame = [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:[NSString stringWithFormat: 
                           @"%@_0000%i.png",file,i]]; 
     [animFrames addObject:frame]; 
    } 

    CCAnimation* boxAnimation = [CCAnimation animationWithSpriteFrames:animFrames delay:0.075f]; 
    CCAnimate * boxAction = [CCAnimate actionWithAnimation:boxAnimation]; 
    CCAction *call=[CCCallBlock actionWithBlock:^{[self removeFromParentAndCleanup:YES];}]; 
    CCAction * sequence=[CCSequence actions:boxAction,[CCHide action],call,nil]; 
    [boom runAction:sequence]; 

    return self; 

Как бы вы перемещаете все это дело?

ответ

0

Есть несколько способов сделать это. Если вы не preocupied с обнаружением коллизий, то один из способов будет:

CGPoint egressPosition = ccp(0,0); // figure this out in your app 
float moveDuration = 1.5f ;  // whatever time you compute for desired speed and distance 
id move = [CCMoveTo actionWithDuration:moveDuration position:egressPosition]; 
id spawn = [CCSpawn actions:sequence,move,nil]; 
[boom runAction:spawn]; 

иначе, используя код как

[self schedule:@selector(moveBox:)]; // optional, you could do this in update method 
[boom runAction:sequence]; 


-(void) moveBoom:(CCTime) dt { 
    CGPoint newPosition; 
    delta = ccp(dt*speedX,dt*speedY);  // crude , just to get the idea 
    newPosition = ccpAdd(boom.position,delta); 

    // here you can figure out collisions at newPosition before the collision 
    // and do whatever seems appropriate 

    boom.position = newPosition; 

} 
+0

Спасибо, я на самом деле озабочен обнаружением коллизий .. – Curnelious

+0

еще одно , если у меня много слоев, в которых хранятся спрайты, и мне нужно иметь какое-то обнаружение столкновения, каков был бы правильный способ собрать все спрайты со всех слоев и проверить конфликт между ними? – Curnelious

+0

@Curnelious Вы ищете столкновения между ограничивающими прямоугольниками для спрайтов или самих изображений (например, тела собаки)? – FuzzyBunnySlippers

Смежные вопросы