Estoy desarrollando una aplicación usando phisycs cocos2d y box2d. Quiero hacer que mi sprite se anime al moverse. Hice archivos * .plist y * .png en Zwoptex y los agregué a mi proyecto. Ahora, estoy tratando de crear un sprite:

        [[CCSpriteFrameCache sharedSpriteFrameCache]addSpriteFramesWithFile:@"SquirrelAnimation.plist"];

        node = [CCSpriteBatchNode batchNodeWithFile:@"SquirrelAnimation.png" capacity:100];
        spriteTexture = [node texture];

        b2BodyDef bodyDef;
        bodyDef.type = bodyType;
        CGSize size = [CCDirector sharedDirector].winSize;
        CGPoint point = ccp(size.width / 2, size.height / 2);
        bodyDef.position.Set(point.x / PTM_RATIO, point.y / PTM_RATIO);
        body = world->CreateBody(&bodyDef);

        sprite = [PhysicsSprite spriteWithTexture:spriteTexture];
        [sprite setPhysicsBody:body];
        [node addChild:sprite];

Pero este código crea un sprite con todos los marcos al nodo. ¿Qué estoy haciendo mal?

0
SentineL 15 feb. 2012 a las 09:20

1 respuesta

La mejor respuesta

Extraiga un marco como este ...

    [[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"spritesheet.plist"];
    CCSpriteBatchNode *spriteSheet = [CCSpriteBatchNode batchNodeWithFile:@"spritesheet.png"];


    [self addChild:spriteSheet];

     NSMutableArray *frames = [[[NSMutableArray alloc]init]retain];


     for(int i = 1; i <= numberFrames; i++) {
          [frames addObject:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:[NSString stringWithFormat:@"%@0%d.png", file_name, i]]];
        }


     // Animation object with 0.04 seconds between each frame (~30fps)
        CCAnimation *anim = [CCAnimation animationWithFrames:frames delay:0.04f];

        if(self.sprite){
          // Animate the sprite
          [self.sprite runAction:[CCAnimate actionWithAnimation:anim restoreOriginalFrame:NO]];
         }
2
Anshul Jain 15 feb. 2012 a las 09:30
Yo uso box2d, por lo que mis vistas se actualizan en cada iteración de la actualización de b2World. Parece que runAction no funciona aquí. ¿Debería intentar cambiar el sprite en cada iteración mediante código manual? ¿O hay otra solución?
 – 
SentineL
15 feb. 2012 a las 09:50
Es solo por ejemplo ... obtiene marcos en una matriz, luego puede usarlo de acuerdo con usted, es decir, usa CCAnimation o simplemente un bucle for ... depende de sus requisitos ...
 – 
Anshul Jain
15 feb. 2012 a las 09:54