如何在box2d中移动和跳转动画精灵

时间:2013-02-05 07:42:33

标签: xcode4 box2d-iphone

在这段代码中使用spritesheet创建了一个动画精灵。精灵创造了身体。男孩可以使用按钮移动世界。

   //spritesheet plist
   [[CCSpriteFrameCache sharedSpriteFrameCache]
     addSpriteFramesWithFile:@"boyRunning.plist"];  


    // Create a sprite sheet with the boyRunning  images
    spriteSheet = [CCSpriteBatchNode batchNodeWithFile:@"boyRunning.png"];
    [self addChild:spriteSheet];

    // Load up the frames of our animation
    NSMutableArray *walkAnimFrames = [NSMutableArray array];
    for(int i = 2; i <=7; ++i) {
        [walkAnimFrames addObject:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:[NSString stringWithFormat:@"boyRunning%d.png", i]]];
    }
    walkAnim = [CCAnimation animationWithFrames:walkAnimFrames delay:0.1f];

    // Create a sprite for our boy
    CGSize winSize = [CCDirector sharedDirector].winSize;
    self.boy = [CCSprite spriteWithSpriteFrameName:@"boyRunning1.png"];        
    _boy.position = ccp(100, 90);
    self.walkAction = [CCRepeatForever actionWithAction:[CCAnimate actionWithAnimation:walkAnim restoreOriginalFrame:NO]];
    [_boy runAction:_walkAction];
    [spriteSheet addChild:_boy];
    // boy body creation
    b2BodyDef boyBodyDef;
    boyBodyDef.type = b2_dynamicBody;
    boyBodyDef.linearDamping = 1;
    boyBodyDef.angularDamping = 1;
    boyBodyDef.position.Set(230.0f/PTM_RATIO,(FLOOR_HEIGHT+91.0f)/PTM_RATIO);
    boyBodyDef.userData = _boy;
    boyBody = world->CreateBody(&boyBodyDef);

    b2Body* dynamicBody = world->CreateBody(&boyBodyDef);
    // Define another box shape for our dynamic body.
    b2PolygonShape boxshape;
    boxshape.SetAsBox(11.0f/PTM_RATIO, 30.0f/PTM_RATIO);//These are mid points for our 1m box
    // Define the dynamic body fixture.
    b2FixtureDef fixtureDef;
    fixtureDef.shape = &boxshape;   
    fixtureDef.density = 1.0f;
    fixtureDef.friction = 0.3f;
    armFixture = boyBody->CreateFixture(&fixtureDef);
    dynamicBody->SetTransform( b2Vec2( 10, 20 ), 1 );

1 个答案:

答案 0 :(得分:0)

按下按钮时

移动使用

body->ApplyForce( b2Vec2(0,50), bodiy]->GetWorldCenter() );

跳转

body[0]->ApplyLinearImpulse( b2Vec2(50,50), body->GetWorldCenter() );

身体是你的身体附着在精灵上,而b2ve2(x,y)就是方向。