gpt4 book ai didi

box2d - Libgdx Box2D 将图像设置为 body

转载 作者:行者123 更新时间:2023-12-04 09:52:30 24 4
gpt4 key购买 nike

我在将图像设置为动态/静态主体时遇到问题。

我找到了一个关于它的闪存代码

public void setImage()
{
sprite = new B2Sprite();
var bitmap:Bitmap = new Image();
sprite.addChild();
bitmap.x -= bitmap.width / 2;
bitmap.y -= bitmap.height / 2;
body.SetUserData(sprite);
sprite.body = body;
}

但将其转换为 java :(
请任何人帮助我或提供有关 java 上 box2D 教程的链接。

最佳答案

您有一个关于 box2D 和 libgdx 教学逻辑和渲染概念的非常有用的链接。 here

然后你可以像这样分离渲染部分的逻辑部分:

逻辑部分:

private void createBottleBody() {
// 0. Create a loader for the file saved from the editor.
BodyEditorLoader loader = new BodyEditorLoader(sourceFile);

// 1. Create a BodyDef, as usual.
BodyDef bd = new BodyDef();
bd.position.set(0, 0);
bd.type = BodyType.DynamicBody;

// 2. Create a FixtureDef, as usual.
FixtureDef fd = new FixtureDef();
fd.density = 1;
fd.friction = 0.5f;
fd.restitution = 0.3f;

// 3. Create a Body, as usual.
bottleModel = world.createBody(bd);

// 4. Create the body fixture automatically by using the loader.
loader.attachFixture(bottleModel, "test01", fd, BOTTLE_WIDTH);
}

渲染部分:
public void render() {
Vector2 bottlePos = bottleModel.getPosition().sub(bottleModelOrigin);

bottleSprite.setPosition(bottlePos.x, bottlePos.y);
bottleSprite.setOrigin(bottleModelOrigin.x, bottleModelOrigin.y);
bottleSprite.setRotation(bottleModel.getAngle() * MathUtils.radiansToDegrees);

...
}

装载机:在链接中您可以找到装载机。
public void attachFixture(Body body, String name, FixtureDef fd, float scale) {

//Load the rigidModel by key
RigidBodyModel rbModel = (RigidBodyModel) this.model.rigidBodies.get(name);

if (rbModel == null)
throw new RuntimeException("Name '" + name + "' was not found.");

//Loading polygons
Vector2 origin = this.vec.set(rbModel.origin).mul(scale);
Vector2[] vertexes;
PolygonModel polygon;

for (int i = rbModel.polygons.size()-1; 0 <= i; i--) {
polygon = (PolygonModel) rbModel.polygons.get(i);
vertexes = polygon.vectorBuffer;

//Loading vertexes (scaled) from polygon
for (int ii = vertexes.length-1; 0 <= ii; ii--) {
vertexes[ii] = new Vector2().set((Vector2) polygon.vertices.get(ii)).mul(scale);
vertexes[ii].sub(origin);
}

//sets vertexs to polygon
this.polygonShape.set(vertexes);
fd.shape = this.polygonShape;
body.createFixture(fd);

}


//Loading circles
CircleModel circle;
Vector2 center;
float radius;

for (int i = rbModel.circles.size()-1; 0 <= i; i--) {
circle = (CircleModel) rbModel.circles.get(i);
center = new Vector2().set(circle.center).mul(scale);
radius = circle.radius * scale;

this.circleShape.setPosition(center);
this.circleShape.setRadius(radius);
fd.shape = this.circleShape;
body.createFixture(fd);

}
}

最后...模型
public static class CircleModel {
public final Vector2 center = new Vector2();
public float radius;
}

public static class PolygonModel {
public final List<Vector2> vertices = new ArrayList<Vector2>();
private Vector2[] vectorBuffer;
}

public static class RigidBodyModel {
public String name;
public String imagePath;
public final Vector2 origin = new Vector2();
public final List<PolygonModel> polygons = new ArrayList<PolygonModel>();
public final List<CircleModel> circles = new ArrayList<CircleModel>();
}

public static class Model {
public final Map<String, RigidBodyModel> rigidBodies = new HashMap<String, RigidBodyModel>();
}

希望能帮助到你!

关于box2d - Libgdx Box2D 将图像设置为 body ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14678223/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com