【问题标题】:libGDX TiledMapRenderer not drawinglibGDX TiledMapRenderer 不绘图
【发布时间】:2014-06-28 20:24:07
【问题描述】:

TiledMapRenderer 有问题。我用Tiled Map Editor 制作了一个 tmx 地图,其中包含 4 个平铺对象和 1 个 64x64 平铺。但我无法弄清楚我错过了什么。屏幕上什么都没有。地图和瓦片集位于资产文件夹中。我有很多谷歌,从教程和GDX TiledMap 测试中复制粘贴的代码,但在我的Alcatel One Touch Pixi 4007d GLES 2.0 准备好的手机上看不到任何东西,除了fps 计数器和相机位置。我错过了什么?答案可能对其他新手libGDX 程序员有帮助。 我已经在调试器中检查了地图,并且所有变量都已初始化,地图中还有一个图层。

这是Game类的代码

public class GameMain extends Game implements InputProcessor
{ 
private TiledMap map;
private TiledMapRenderer renderer;
private OrthographicCamera camera;
private BitmapFont font;
private SpriteBatch batch;

Vector2 mPrevTouch;

@Override
public void create () {
    float w = Gdx.graphics.getWidth();
    float h = Gdx.graphics.getHeight();

    camera = new OrthographicCamera();
    camera.setToOrtho(false, (w / h) * 10, 10);
    camera.update();

    Gdx.input.setInputProcessor(this);

    font = new BitmapFont();
    batch = new SpriteBatch();

    map = new TmxMapLoader().load("test.tmx");
    renderer = new OrthogonalTiledMapRenderer(map);
}

@Override
public void render () {
    Gdx.gl.glClearColor(0.55f, 0.55f, 0.55f, 1f);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    camera.update();

    renderer.setView(camera);
    renderer.render();

    batch.begin();
    font.draw(batch, "FPS: " + Gdx.graphics.getFramesPerSecond(), 10, 20);
    font.draw(batch, "Pos: " + camera.position.x + " " + camera.position.y, 20, 20);
    batch.end();        
}

@Override
public void dispose () {
    map.dispose();
}    

@Override
public boolean keyDown(int arg0) {
    // TODO Auto-generated method stub
    return false;
}

@Override
public boolean keyTyped(char arg0) {
    // TODO Auto-generated method stub
    return false;
}

@Override
public boolean keyUp(int arg0) {
    // TODO Auto-generated method stub
    return false;
}

@Override
public boolean mouseMoved(int arg0, int arg1) {
    // TODO Auto-generated method stub
    return false;
}

@Override
public boolean scrolled(int arg0) {
    // TODO Auto-generated method stub
    return false;
}

@Override
public boolean touchDown(int arg0, int arg1, int arg2, int arg3) {
    // TODO Auto-generated method stub
    return false;
}

@Override
public boolean touchDragged(int screenX, int screenY, int arg2) {

    if (mPrevTouch == null)
        mPrevTouch = new Vector2(0, 0);
    else
        camera.translate(new Vector2(screenX - mPrevTouch.x, screenY - mPrevTouch.y));

    mPrevTouch.x = screenX;
    mPrevTouch.y = screenY;

    return true;
}

@Override
public boolean touchUp(int arg0, int arg1, int arg2, int arg3) {
    // TODO Auto-generated method stub
    return false;
}
}

【问题讨论】:

    标签: java android libgdx


    【解决方案1】:

    您的代码看起来不错,所以我认为您的相机尺寸或相机位置有问题。您的 TMX 地图的大小是多少? + 尝试以这种方式创建相机:

        tiledMapCamera.setToOrtho(false, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
    

    【讨论】:

    • Alon Zilberman,谢谢你的回答,但是在相机代码更新后屏幕上仍然没有任何内容,尽管这让我一直在挖掘。最后,我加载了一个Windows BMP 瓦片集,瞧,它成功了。因此,PNG 映射或Tiled Map Editor 0.8 有一些东西。为什么一切都不是那么简单?我还在调试器中更深入地检查了TmxMapLoader 字段,发现pixmap 为空,但大小字段没问题。
    • 检查您的 tmx 文件(使用记事本打开),如果图像源标签中的平铺集的路径正常。也尝试用一些瓷砖填充所有地图,也许你会看到一些东西,我们会明白这是相机缩放/位置问题。它应该很简单,你应该找到一些小错误。
    • Alon Zilberman,非常感谢,现在我非常接近解决方案。我看到 tmx 地图有些东西,我刚刚加载了只有瓷砖的 png 地图,没有瓷砖对象。我会在找到解决方案时发布解决方案。
    • Alon Zilberman,好的,最后主要是相机错误,为什么我没有在地图上看到我唯一的一个图块。其次是TmxMapLoader不支持tile-object。没有这种类型。这种类型的对象被解释为RectangleMapObject,我必须手动绘制它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-04
    相关资源
    最近更新 更多