如何在iPhone中的Box2d中获取精灵的位置

时间:2011-03-23 04:23:06

标签: iphone position sprite box2d

帮我解决一些示例代码,以获取iPhone中Box2d中精灵的位置。

1 个答案:

答案 0 :(得分:0)

要从box2d bodyDef获取精灵的位置,首先要将精灵保存在bodyDef的userData属性中。

例如,在物理环境中创建球的工厂方法中:

    //create the body
    b2BodyDef initBodyDef;

    initBodyDef.type = b2_dynamicBody;
    initBodyDef.position.Set(p.x/PTM_RATIO, p.y/PTM_RATIO);

    //Save the sprite in the userData property of the bodyDef, to access later
    initBodyDef.userData = ballSprite;

    b2Body *body = world->CreateBody(&initBodyDef);

    //Rest of the factory method ............ (i.e. create shape, create fixture)

然后当你想访问精灵的位置时,例如在进行碰撞检测时,你会得到指向bodyDef的userData属性中的精灵的指针:

这将是tick方法(发生碰撞检测),或者你需要获得精灵的位置。

    CCSprite *mySprite = (CCSprite *) bodyDef->GetUserData();

    CGPoint spritePosition = mySprite.position;

在上面的第一行代码中,我们创建了一个sprite对象,并在bodyDef上调用GetUserData方法,该方法返回我们之前保存的sprite。注意我们必须转换返回的userData,否则它将返回错误。一旦我们保存了精灵,我们所要做的就是调用mySprite指针上的position属性。多数民众赞成。