gpt4 book ai didi

Java/LibGDX : Get custom object properties on box2D collision

转载 作者:行者123 更新时间:2023-12-02 01:30:11 24 4
gpt4 key购买 nike

我正在游戏中设置检查点,并希望玩家每次重生时都能获得应有的颜色。否则,玩家会立即死亡。

我在我的接触监听器中尝试了这段代码(检查固定装置 a(玩家)和固定装置 b(检查点)之间的接触):

MapObjects objects = play.getTileMap().getLayers().get("checkpoints").getObjects();

for (MapObject object : objects) {
if (object.getProperties().containsKey("Color")) {
int color = object.getProperties().get("Color", Integer.class);
Gdx.app.log("Respawn color", Integer.toString(color));
game.setRespawnColor(color);
}
}

但是,此代码不会从玩家碰撞的检查点获取属性“Color”,而是从它找到的最后一个检查点获取属性“Color”。

例如,一种解决方法是为每种颜色添加一个检查点层(red_checkpoint),但这会添加很多不必要的代码。

谢谢!

最佳答案

您可以将 UserData 添加到您的 Fixtures 和 Bodies 中,如果发生碰撞,您可以读取这些数据。

当您创建检查点的主体时,将用户数据添加到夹具和主体中:

Body body = world.createBody(bodyDef);
body.setUserData(Checkpoint.COLOR_RED); //Set the Color of the Checkpoint as Body UserData

FixtureDef fixtureDef = new FixtureDef();
Fixture fixture = body.createFixture(fixtureDef);
fixture.setUserData(Type.CHECKPOINT); //Set the Type of the fixture to detect if it a Checkpoint

检查点枚举可以如下所示:

public enum Checkpoint {
COLOR_RED(1),
COLOR_GREEN(2);

public final color;
Checkpoint(int colorValue){
color = colorValue;
}
}

然后在碰撞监听器中,您可以获得这些 UserData:

Fixture fixA = contact.getFixtureA();
Fixture fixB = contact.getFixtureB();

Checkpoint collidedCheckpoint = null;
if(fixA.getUserData == Type.CHECKPOINT){ //Check if fixA is a Checkpoint
collidedCheckpoint = ((Checkpoint)fixA.getBody().getUserData());
} else if(fixB.getUserData == Type.CHECKPOINT){ //Check if fixB is a Checkpoint
collidedCheckpoint = ((Checkpoint)fixB.getBody().getUserData());
}
if(collidedCheckpoint != null){
//Get the color of the Checkpoint by saving a int in the enum or something else
int color = collidedCheckpoint.color; // 1
} else {
//Not with a Checkpoint collided
}

关于Java/LibGDX : Get custom object properties on box2D collision,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56215337/

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