提前感谢您的帮助!
我正在学习关于在我的游戏中添加实体的box2d
教程,但似乎它们只是使用调试器绘图。
我只是练习,我有一个塞尔达snes风格的游戏地图和英雄角色加载很好。在我的游戏地图中,我有对象(矩形地图对象),它们是树桩的长方形(我想用它来阻止英雄穿过一棵树)。
在此示例中可以使用Box2d
吗?我不想要任何gravity/friction/mass
等,但我想要做的是从树桩矩形制作'静体',我可以检测到我的英雄的矩形碰撞。当然,我可以编写自己的代码来检查碰撞,但它总是错误的,我正在努力想出循环所有树桩矩形的正确方法,并阻止英雄穿过它。
(注意:我也是写平台游戏的一部分。它一切运作良好,他登陆平台,但我没有使用Box2d
,例如它没有脱落当你走过平台的边缘时,它会继续前进直到你跳起来然后它会检测到平台的位置。 - 因此我想学习box2d
)
可以box2d
制作这些静态物体(按照我上面说的方式),如果是这样,你如何将物体链接到你已经拥有的精灵(和我从{{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)
使用此功能
我希望这会对你的游戏有所帮助;)祝你好运