(LIBGDX)渲染精灵(角色)隐藏墙

时间:2015-07-27 21:44:39

标签: java dictionary libgdx render tiled

我正在与Libgdx进行游戏,我正在使用等距视角。 渲染我的角色时遇到问题,因为地图是从Tiled Map Editor加载的,而角色是Sprite。

如果我在地图的第0层上有墙,在Sprite之前绘制墙时,如果精灵在墙后面,我们将看到Sprite而不是墙(我们应该看到墙),如果渲染首先是Sprite,当精灵位于墙前时我们会看到墙而不是Sprite(我们应该看到Sprite)。有关解决这个问题的想法吗?

2 个答案:

答案 0 :(得分:0)

我还没有真正使用平铺地图,但我认为它是这样的。

首先,在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中的对象,并将它们插入到基于行的绘制顺序中。

答案 1 :(得分:0)

我在其他地方找到了一个“答案”,所以我与你分享,所以如果还有其他问题:

fitfun=@(x) interp1(x2,y2,x,'linear');