在Box2D对象上分配纹理

时间:2012-02-27 03:18:30

标签: java libgdx box2d sprite

我最近开始使用box2d, 目前我遇到了绘制box2d的问题。 现在,我的盒子只用边界线绘制。但我想在框存在的地方绘制纹理。

尽管如此,我不确定正确的方法是将纹理分配给box2d,还是使用Sprite在框上绘制纹理。

有没有办法为box2d指定纹理?或者在使用box2d时渲染纹理的其他方法?

2 个答案:

答案 0 :(得分:0)

我使用的基本上有两种方法。

  1. 在GameManager / GameWorld类中实现每帧调用的update / tick方法。在调用world->Step(delta, 10, 10);循环遍历世界上的所有实体并更新其Sprite位置之后。请注意,当您创建实体时,许多人将使用body.userData成员来存储指向“附加”到此主体的Sprite的指针。

    for(b2Body *b = _world->GetBodyList(); b; b=b->GetNext()) 
    {
      if (b->GetUserData() != NULL) {
        CCSprite *spriteData = (CCSprite *)b->GetUserData();
        spriteData.position = ccp(b->GetPosition().x * PTM_RATIO,b->GetPosition().y * PTM_RATIO);
        spriteData.rotation = -1 * CC_RADIANS_TO_DEGREES(b->GetAngle());
      }
    }
    
  2. 假设您有一个名为player的对象。你可以在这个类中实现一个tick / update方法,用身体的位置来更新它自己的sprite ......比如:

    [self setPosition:ccp(body->GetPosition().x * PTM_RATIO, body->GetPosition().y * PTM_RATIO)];
    
  3. 您需要有一个指向b2_body的指针,并将此实例添加到实现主更新/刻度/步骤的CCLayer中。

答案 1 :(得分:0)

你必须找到实际的身体姿势 例如,在render方法中,您可以实现以下内容来查找正文位置并为其附加纹理。

ballPosition = ballBody.getPosition();

并将位置应用于屏幕上绘制的纹理