我想在我的游戏中得到一个由 2 个静态墙组成的物理体,然后一个球会击中它们并与它们碰撞。第一个墙是游戏窗口的边界,作为一个循环,第二个墙由 3 部分组成:一条直线 + 一条弧线 + 一条直线,所以我使用 ChainShape.createChain 首先获得一个链形状,然后添加它作为身体上的固定装置。但是当我运行代码时,我向墙壁发射一个球,看起来墙壁没有处于正确的位置,并且没有正确的碰撞,甚至在游戏窗口之外也有移动。我不知道我是否做错了什么,如果有人有任何想法,我将非常感激!
JBox2D 用于物理,Slick2D 用于视图
游戏窗口大小(以像素为单位):450(宽度)* 900(高度)
单位变换:JBox2D 中的 1 米在 Slick2D 中相当于 500 像素
// For the first wall
BodyDef part1BodyDef = new BodyDef();
part1BodyDef.position.set(0, 0);
Body part1Body = world.createBody(part1BodyDef);
Vec2[] vecArray1 = {
new Vec2(0.45f, 0.9f),
new Vec2(0.45f, -0.9f),
new Vec2(-0.45f, -0.9f),
new Vec2(-0.45f, 0.9f)
};
ChainShape part1Shape = new ChainShape();
part1Shape.createLoop(vecArray1, vecArray1.length);
part1Body.createFixture(part1Shape, 0);
// For the second wall
BodyDef part2BodyDef = new BodyDef();
part2BodyDef.position.set((-0.38f - 0.04f) / 2, (-0.66 + 0.78) / 2);
Body part2Body = world.createBody(part2BodyDef);
Vec2[] vecArray2 = {
new Vec2(-0.38f, -0.66f),
new Vec2(-0.38f, 0.76f),
new Vec2(-0.37898037f, 0.76632154f),
new Vec2(-0.37614113f, 0.7718118f),
new Vec2(-0.37181175f, 0.77614117f),
new Vec2(-0.36632153f, 0.77898043f),
new Vec2(-0.36f, 0.78f),
new Vec2(-0.04f, 0.5952f),
new Vec2(-0.04f, 0.584f) };
ChainShape part2Shape = new ChainShape();
part2Shape.createChain(vecArray2, vecArray2.length);
part2Body.createFixture(part2Shape, 0);
当我运行代码时,我向墙壁发射一个球,看起来墙壁位置不正确并且没有正确的碰撞,甚至在游戏窗口之外也有移动。
已经解决了,只是因为人们不需要写
bodyDef.position.set(... , ...)
,所以在物体上添加形状时,物体的位置会自动根据形状的位置来设置。