Cocos2D спрайт повторить анимацию навсегда
Я надеюсь, что в моей игре для iOS герой продолжит работать, пока не коснется экран и герой не должен прыгнуть. Итак, я пишу:
В.h файле:
@interface Hero : CCSprite {
CCSprite *_hero;
id _keepRunning;
}
@property(nonatomic,retain) id keepRunning;
В.m файле:
@synthesize keepRunning = _keepRunning;
-(id) init {
_keepRunning = [CCRepeatForever actionWithAction:[CCAnimate actionWithSpriteSequence:@"heroRun%04d.png"
numFrames:30
delay:0.02f
restoreOriginalFrame:NO]];
}
Затем, когда игра начинается, я вызываю метод run ():
-(void) run {
[_hero stopAllActions];
[_hero runAction:_keepRunning];
_heroState = RUNNING;
}
Потом я нашел CCAnimate actionWithSpriteSequence: numFrames: delay: restoreOriginalFrame:
устарела в cocos2d v2.0. Итак, мой вопрос, как в cocos2d v2.0, как я могу реализовать эту анимацию? А именно, держать моего героя в движении? Спасибо!
РЕДАКТИРОВАТЬ:
Я попробовал это:
-(CCAnimation*) getMyAnimationWithFramesName:(NSString*)nameFormat numFrames:(int)numFrames delay:(float)delay {
NSMutableArray *frames = [[NSMutableArray alloc] init];
for (int i = 1; i <= numFrames; i++) {
NSString *frameName = [NSString stringWithFormat:nameFormat,i];
[frames addObject:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:frameName]];
}
CCAnimation *ani = [CCAnimation animationWithSpriteFrames:frames delay:delay];
return ani;
}
Затем в init ():
_keepRunning = [self getMyAnimationWithFramesName:@"heroRun%04d.png" numFrames:30 delay:0.02f];
и в run ():
[_hero runAction:[CCAnimate actionWithAnimation:_keepRunning]];
Но это все еще не работает. Что я должен делать?
1 ответ
Прежде всего, вы скачиваете текстуру с сайта http://www.codeandweb.com/texturepacker/download, создаете p-List и используете его ниже кода
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"AnimatedMan.plist"];
CCSpriteBatchNode *spriteSheet = [CCSpriteBatchNode batchNodeWithFile:@"AnimatedMan.png"];
[self addChild:spriteSheet];
Соберите список фреймов (спрайт)
NSMutableArray *walkAnimFrames = [NSMutableArray array];
for (int i=1; i<=6; i++) {
[walkAnimFrames addObject:
[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:
[NSString stringWithFormat:@"step0%d.png",i]]];
}
дать действие спрайту
CCAnimation *walkAnim = [CCAnimation animationWithSpriteFrames:walkAnimFrames delay:0.1f];
manSprite=[CCSprite spriteWithSpriteFrameName:@"step01.png"];
manSprite.position=ccp(winsize.width/2, winsize.height/2-40);
Sprite RepeaetForever для manSprite
id first=[CCSequence actions:[CCRepeatForever actionWithAction:
[CCAnimate actionWithAnimation:walkAnim]],nil];
[manSprite runAction:first];