使用camera.unproject重新渲染纹理会在摄像机运动上设置错误的位置

时间:2018-09-09 04:41:34

标签: java camera libgdx

问题

当我移动相机时,正在渲染的每个纹理在屏幕上的2个不同位置都会闪烁。

我想要的

示例:当我将摄像机向左移动时,我希望所有纹理向右移动32个像素。 相机每按一次按钮,相机就会移动32个像素。

当前代码

我在评论中添加了一些额外的解释。

MainProgramEntryPoint

/**
 * DefaultCamera: Setting up OrthographicCamera
 * CameraMovement: Using camera.translate on keypresses to move the screen.
 * TestMoveable: Creating a texture for testing rendering.
 */
public class WorldSimGame extends ApplicationAdapter {
    private DefaultCamera defaultCamera;
    private CameraMovement cameraMovement;
    private TestMoveable testMoveable;

    // Setting up the camera and texture.
    public void create ()  {
        defaultCamera = new DefaultCamera();
        cameraMovement =  new CameraMovement(defaultCamera.getCamera());
        testMoveable = new TestMoveable();
        testMoveable.create(defaultCamera);
    }

    // The testMoveable.render(defaultCamera) should keep track of the  testMoveable position
    public void render ()  {
        Gdx.gl.glClearColor(1, 0, 0, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
        defaultCamera.render();
        testMoveable.render(defaultCamera);
    }
}

TestMoveable

public class TestMoveable {
    private Texture tex;
    private SpriteBatch batch;
    private Vector3 position;

    public void create(DefaultCamera defaultCamera) {
        tex = new Texture(("wall.png"));    
        batch = new SpriteBatch();
        position = new Vector3(100, 100, 0);
        defaultCamera.getCamera().unproject(position);
    }
  

我无法想象在世界坐标上设置x和y坐标是行不通的。

    public void render(DefaultCamera defaultCamera) {       
        batch.begin();
        batch.draw(tex, position.x, position.y);
        batch.end();
    }
}

我在这里做错了什么?还有没有更好的方法来实现渲染器的位置检查?

1 个答案:

答案 0 :(得分:0)

您不需要检查渲染器的位置。您要做的就是设置DELETE FROM INT_LOCK WHERE REGION=? AND LOCK_KEY=? AND CREATED_DATE<?的大小和位置。然后,用camera说出要绘制相机看到的内容的批处理。

因此,当您创建尺寸= 50x50和位置= 100,100的相机时
现在您创建了一个batch.setProjectionMatrix(camera.combined),尺寸为50x50,位置为75,75
纹理将完全适合孔屏幕。

相机的位置在中央。因此Texture的排名是75,75,而不是100,100

现在要移动相机时,可以使用相机的Texture方法。
致电:translate()将您的相机向右移动25个单位,现在您只在屏幕左侧看到camera.translate(25,0)的一半。

这是可移动相机的简单示例。您可以使用箭头键四处移动:

Texture