
Hoy quiero compartir con todos vosotros un pequeño fragmento de código que os puede ser útil en algún momento de vuestro desarrollo para iOS.
Si eres programador de cocos2d, sabrás que existen lasAnimaciones, (llamadasCCAnimation), y que puedes crear una secuencia de animaciones mediante la clase CCSequence.
El problema de esta clase es que solo puedes pasar una lista fija de animaciones, mediante el método
| (id) | + actions: |
Sabemos que este método tiene como argumentos una lista de animaciones acabadas con nil, pero ¿Que pasa si no sabemos cuantas acciones queremos añadir?, o si estas acciones dependen de un bucle que tengamos.
Para solucionar este problema, voy a mostraros una solución basada en el uso de un NSMutableArray.
El objetivo es poder crear una secuencia de animaciones de forma dinámica, añadirlas a una variable de tipo NSMutableArray y pasar esta variable a una función que nos cree una secuencia.
Para implementar esta solución, he decidido crear una clase Helper, denominada CCSequenceHelper. La utilización de la misma es muy fácil, simplemente creamos un NSMutableArray y añadimos CCAnimations a el (en este ejemplo, utilizo una animación especial que se encarga de ejecutar un método mediante un selector CCCallFuncND)
-(void) muestraAnimacionPreguntar:(NSMutableArray*) carasOcultar
{
int count = [carasOcultar count];
NSNumber *number;
NSMutableArray * secuencias = [NSMutableArray arrayWithCapacity:count+1];
for (int i = 0; i < count ;i++)
{
number = ((NSNumber*)[carasOcultar objectAtIndex:i]);
CCCallFunc * showX = [CCCallFuncND actionWithTarget:self selector:@selector(muestraCancelaCara:data:) data:(void*)[number intValue]];
showX.duration = 1;
[secuencias addObject:showX];
}
[secuencias addObject:[CCCallFunc actionWithTarget:self selector:@selector(endAnimacionPreguntar)]];
[self runAction:[CCSequenceHelper actionMutableArray:secuencias]];
}
y aquí la implementación de la clase Helper.
//
// CCSequenceHelper.h
//
// Created by Jose Antonio Andújar Clavell on 09/02/11.
// Alias "jandujar"
//
// More snippets on http://www.jandujar.com
//
// License http://creativecommons.org/licenses/by/3.0/
//
// Based upon code by daemonk
// http://www.cocos2d-iphone.org/forum/topic/2547
//
#import
#import "cocos2d.h"
@interface CCSequenceHelper : CCSequence {
}
+(id) actionMutableArray: (NSMutableArray*) _actionList;
@end
//
// CCSequenceHelper.m
// Created by Jose Antonio Andújar Clavell on 09/02/11.
// Alias "jandujar"
//
// More snippets on http://www.jandujar.com
//
// License http://creativecommons.org/licenses/by/3.0/
//
// Based upon code by daemonk
// http://www.cocos2d-iphone.org/forum/topic/2547
//
#import "CCSequenceHelper.h"
@implementation CCSequenceHelper
+(id) actionMutableArray: (NSMutableArray*) _actionList {
CCFiniteTimeAction *now;
CCFiniteTimeAction *prev = [_actionList objectAtIndex:0];
for (int i = 1 ; i < [_actionList count] ; i++) {
now = [_actionList objectAtIndex:i];
prev = [CCSequence actionOne: prev two: now];
}
return prev;
}
@end
Si os ha sido útil este fragmento de código, os animo a compartirlo. Saludos!!!



