box2d libgdx - 将box2d主体'绑定'到精灵或其他对象

时间:2015-11-17 01:11:20

标签: java libgdx box2d scene2d

提前感谢您的帮助! 我正在学习关于在我的游戏中添加实体的box2d教程,但似乎它们只是使用调试器绘图。

我只是练习,我有一个塞尔达snes风格的游戏地图和英雄角色加载很好。在我的游戏地图中,我有对象(矩形地图对象),它们是树桩的长方形(我想用它来阻止英雄穿过一棵树)。

在此示例中可以使用Box2d吗?我不想要任何gravity/friction/mass等,但我想要做的是从树桩矩形制作'静体',我可以检测到我的英雄的矩形碰撞。当然,我可以编写自己的代码来检查碰撞,但它总是错误的,我正在努力想出循环所有树桩矩形的正确方法,并阻止英雄穿过它。

注意:我也是写平台游戏的一部分。它一切运作良好,他登陆平台,但我没有使用Box2d,例如它没有脱落当你走过平台的边缘时,它会继续前进直到你跳起来然后它会检测到平台的位置。 - 因此我想学习box2d

可以box2d制作这些静态物体(按照我上面说的方式),如果是这样,你如何将物体链接到你已经拥有的精灵(和我从{{1}拉出的矩形数组})

希望这对人们来说很明确。非常感谢

1 个答案:

答案 0 :(得分:1)

您应该为角色和树木创建灯具

vertexArray = new Vector2[3];
    vertexArray[0] = new Vector2(0, 0);
    vertexArray[1] = new Vector2(2, 0);
    vertexArray[2] = new Vector2(1, 3);

    treePolygonShape = new PolygonShape();
    treePolygonShape.set(vertexArray);

    fixtureTree = new FixtureDef();
    fixtureTree.shape = treePolygonShape;
    fixtureTree.filter.categoryBits = Game.TREE;  // 0x0001 short int
    fixtureTree.filter.maskBits = Game.CHARACTER; //0x0002 short int

    characterShape = new CircleShape();
    shape.setRadius(1);

    fixtureCharacter = new FixtureDef();
    fixtureCharacter.shape = characterShape;
    fixtureCharacter.filter.categoryBits = Game.CHARACTER;
    fixtureCharacter.filter.maskBits =  Game.TREE;

...

创建实体

    characterBodyDef.type = BodyDef.BodyType.KinematicBody; //I suppose your body is kinematic but it can be dynamic too

    Body body = world.createBody(characterBodyDef);
    body.setUserData(characterView); //display object of your character which is linked to the physical body in this way
    characterView.setBody(body); // you can create this setter to have a reference to the physical body from display object
    body.createFixture(fixtureCharacter);

...

    treeBodyDef.type = BodyDef.BodyType.StaticBody; 
    treeBodyDef.position.set(treeX, treeY); //you can set tree position here , or later using setTransform(x, y, angle) function

    Body treeBody = world.createBody(treeBodyDef);
    treeBody.setUserData(treeView); //display object of your tree linked to the body
    treeView.setBody(treeBody); // you can create this setter to have a reference to the physical body from display object
    treeBody.createFixture(fixtureTree);

您的显示对象坐标应该跟随物理体的位置(为方便起见,您可以将它们乘以像PIXELS_TO_METERS = 100这样的系数)

现在你可以

body.setLinearVelocity(velocityX, velocityY);

到角色的身体和渲染(绘画或动作)功能,您可以将显示对象坐标与身体的位置同步 为树木设置一个位置

treeBody.setTransform(x, y, angle) 

使用此功能

我希望这会对你的游戏有所帮助;)祝你好运