我正在设置游戏中的检查点,并希望玩家每次重生时都能获得颜色。否则,玩家立即死亡。
我已经尝试了这件代码,在我的联系人内部(检查固定装置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);
}
}
但是,此代码不会从播放器碰撞的检查点获得属性"颜色",但是从最后一个检查点开始。
例如,一个解决方法是为每种颜色添加一个检查点层(red_checkpoint(,但这会添加感觉像很多不必要的代码。
谢谢!
您可以将UserData添加到固定装置和身体上,如果它发生碰撞,可以阅读。
创建检查站的尸体时
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;
}
}
然后在您的碰撞听众中,您可以获取这些用户数据:
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
}