gpt4 book ai didi

java - LibGDX Tiled 获取碰撞时的对象属性

转载 作者:行者123 更新时间:2023-11-30 02:19:35 28 4
gpt4 key购买 nike

我正在 LibGDX 中开发一款游戏,并使用 Tiled 设置了 map 。我向特定层中的对象添加了一个自定义 String 属性,以获取更多信息,即它代表什么对象。

我设置了一个 ContactListener,它调用 map 对象的抽象类中的方法。监听器看起来像这样:

@Override
public void beginContact(Contact contact) {

Fixture fixtureA = contact.getFixtureA();
Fixture fixtureB = contact.getFixtureB();

if (fixtureA.getUserData() == "player" || fixtureB.getUserData() == "player") {
// Get either fixture A or B, depending on which of them is the player fixture
Fixture player = fixtureA.getUserData() == "player" ? fixtureA : fixtureB;
// Get the colliding object, depending on which of them is the player fixture
Fixture collidedObject = player == fixtureA ? fixtureB : fixtureA;

// Determine what kind of object the player collided with and trigger the respectable method
if (collidedObject.getUserData() instanceof InteractiveMapTileObject) {
((InteractiveMapTileObject) collidedObject.getUserData()).onPlayerBeginContact();
} else if (collidedObject.getUserData() instanceof Enemy) {
((Enemy) collidedObject.getUserData()).onPlayerBeginContact();
}
}
}

当玩家点击 InteractiveMapTileObject 实例的对象时,将调用 onPlayerBeginContact() 方法,如下所示:

@Override
public void onPlayerBeginContact() {
MapObjects objects = playScreen.getMap().getLayers().get("weapon").getObjects();
for (MapObject object : objects) {
if (object.getProperties().containsKey("weapon_name")) {
String weaponName = object.getProperties().get("weapon_name", String.class);
Gdx.app.log("Picked up weapon", weaponName);
}
}
}

在这里,我获取 map 中“武器”层的对象,然后迭代它以找到正确的属性及其值。这样就可以正常工作。

现在的问题是,我显然在图层中有多个对象,因此有多个 MapObject。我需要一种方法来识别玩家碰撞的对象,然后获取它的属性。

是否可以使用 ContactListener 来做到这一点,还是我需要实现其他东西?我已经搜索了大量帖子,但运气不佳。

最佳答案

我认为不要从 MapObject 获取武器名称,而是从 Weapon 类获取武器名称。

每种武器都可以继承自InteractiveTileMapObject。当玩家与夹具发生碰撞时,您可以从用户数据中获取引用,并使用该引用获取武器名称。

希望这个回答对您有所帮助,如果您还有其他问题,请随时在下面发表评论!

关于java - LibGDX Tiled 获取碰撞时的对象属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47252692/

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