我并没有真正使用过平铺地图,但我认为它是这样的。
首先,在 TileEd 中,创建一个对象层,用于您的角色精灵。因此,该层应该位于背景内容和应该遮蔽播放器的内容之间。将其命名为“字符”。
然后,创建一个可以渲染精灵的 MapObject 子类。像这样的:
public class SpriteMapObject extends MapObject {
private Sprite sprite;
public SpriteMapObject (Sprite sprite) {
this.sprite = sprite;
}
@Override
public Color getColor () {
return sprite.getColor();
}
@Override
public void setColor(Color color){
sprite.setColor(color);
}
public void render(Batch batch){
Color spriteColor = sprite.getColor();
float originalAlpha = spriteColor.a;
spriteColor.a *= getOpacity();
sprite.draw(batch);
spriteColor.a = originalAlpha;
}
}
现在加载地图和精灵后,您可以将精灵放在准备好的图层上:
map.getLayers().get("characters").add(new SpriteMapObject(playerSprite));
您还需要对地图渲染器进行子类化,以便它为您渲染精灵。使用您的子类版本而不是原始版本。例如:
public class SpritesOrthogonalTiledMapRenderer extends OrthogonalTiledMapRenderer {
//Override whichever constructor(s) you need
public SpritesOrthogonalTiledMapRenderer (TiledMap map, Batch batch) {
super(map, batch);
}
@Override
public void renderObject(MapObject object) {
super.renderObject(object);
if(object instanceof SpriteMapObject) {
((SpriteMapObject) object).render(batch);
}
}
}
这就是它的工作原理。但是,如果您希望您的播放器能够像您描述的那样位于墙的前面或后面,那么您将需要创建多个额外的层,并在必要时将您的精灵对象移动到不同的层。
在我看来,Libgdx 可以对 OrthogonalTiledMapRenderer 使用功能增强,因此它可以绘制自动合并到 TileLayer 中的对象,并根据行将它们插入到绘制顺序中。