【问题标题】:Sprite sticks to the camera in libgdx?Sprite 粘在 libgdx 中的相机上?
【发布时间】:2023-03-21 01:44:01
【问题描述】:

我想让我离开它的精灵在屏幕上,并在世界中拖动相机。但是精灵粘在相机上,当我拖动相机时,它仍然在屏幕底部。

瓷砖地图(.tmx 文件)和渲染器不会发生这种情况:相机可以拖动瓷砖地图,瓷砖地图不会粘在相机上。使用 spriteBatch,精灵会停留在屏幕底部。

这是我的代码:

map = MyLoader.manager.get("data/mMap.tmx");
float unitScale = 1 / 64f;
renderer = new OrthogonalTiledMapRenderer(map, unitScale);

@Override
public void render() {
    Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);

    camera.update();
    renderer.setView(camera);
    renderer.render();//tilemap works fine

    //sprite
    //batchMap.setProjectionMatrix(camera.combined);//wrong

    batchMap.begin();
    if ( scrFactoryMap.maps.size() > 0 ) {
        scrFactoryMap.getMap(0).draw(batchMap);//sprite sticks to the camera
    }
    str = "string";
    font.draw(batchMap, str, 50,50);//font sticks to the camera
    batchMap.end();
}


private void slerpCamera(){
    //...
    camera.position.add( camX, camY, 0 );
    camera.update();
}

【问题讨论】:

    标签: java opengl libgdx render spritebatch


    【解决方案1】:

    你为什么要评论这个,把它写错?

    //sprite
    //batchMap.setProjectionMatrix(camera.combined);//wrong
    

    无论何时变换(即移动)相机,都必须将新的 ProjectionMatrix 设置为 SpriteBatch。

    取消注释:)

    【讨论】:

    • 我认为这是一个技巧问题。评论清楚地表明这是“错误的”。它不能是解决方案! :D
    • 是的,这是一种可能性:p 我认为他认为这是错误的,因为当使用 ProjectionMatrix 并且他的相机位于 0,0 位置时,看起来好像世界开始于屏幕。所以他坚持认为这是错误的:p 但实际上他只需要移动他的相机。不太擅长解释..
    • 谢谢,你说得对,它几乎可以工作,投影矩阵的问题是我得到一个黑色矩形而不是我的精灵,它在右上角,而没有它,精灵如预期的那样很好地出现在左下角。你知道怎么把它放回图像的左下角吗(它可能是图像的背面,不知何故,设置从下到上、从左到右、从后到前颠倒了?)
    • 设置它的大小Sprite#setSize,而不是缩放它。 sprite.setSize(1, 1);例如。 @保罗
    • 如果有人遇到同样的问题,setSize 会更改宽度/高度,我现在可以将精灵放在中间,只需 0,0 而不是我必须使用的 -sprite.getWidth()/2与setScale。一切正常,非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-18
    • 1970-01-01
    • 2019-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多