JBox2D,使用ChainShape.createChain获取链体,但链体在JBox2D世界中的位置不正确

问题描述 投票:0回答:1

我想在我的游戏中得到一个由 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);

当我运行代码时,我向墙壁发射一个球,看起来墙壁位置不正确并且没有正确的碰撞,甚至在游戏窗口之外也有移动。

java box2d slick2d
1个回答
0
投票

已经解决了,只是因为人们不需要写

bodyDef.position.set(... , ...)
,所以在物体上添加形状时,物体的位置会自动根据形状的位置来设置。

© www.soinside.com 2019 - 2024. All rights reserved.