在我写作的游戏中,我需要一个巨大的世界。所以我把它分成12x12块(1个单元)。Libgdx翻译怪异
渲染一个块我想要使用本地坐标:对于每个块我想要0; 0在块的左下角。
在绿色世界坐标系统,其中,1; 1为1块,对于相同块中,仅原点正在改变。
所以为此,我在我的SpriteBatch中使用了一个转换矩阵,它具有chunk_x *块大小和chunk_y *块大小的转换。但是对于块y = -1它的表现很奇怪。
这里是世界上渲染代码:
public void render() {
batch.setProjectionMatrix(camera.combined);
renderer.setProjectionMatrix(camera.combined);
Matrix4 matrix4 = new Matrix4();
for(Chunk chunk : Collections.unmodifiableCollection(loadedChunks.values())) {
matrix4.setToTranslation(chunk.getX() * Chunk.SIZE, chunk.getY() * Chunk.SIZE, 0);
batch.setTransformMatrix(matrix4);
renderer.setTransformMatrix(matrix4);
chunk.render(batch, renderer);
}
}
我在一个单独的方法更新相机。这里的块渲染代码:
public void render(SpriteBatch batch, ShapeRenderer renderer) {
batch.begin();
for(EntityBlock block : blockLayer0) {
block.render(batch);
}
for(EntityBlock block : blockLayer1) {
block.render(batch);
}
batch.end();
renderer.begin(ShapeRenderer.ShapeType.Line);
renderer.setColor(Color.WHITE);
renderer.rect(0, 0, SIZE /* SIZE is constants and = 12 */, SIZE);
renderer.end();
}
Render方法在我的实体块:
@Override
public void render(SpriteBatch batch) {
batch.draw(texture, get(PositionComponent.class).getX(), get(PositionComponent.class).getY(), 1f, 1f);
}
这里是从第4块的测试图(-1; 0)至(0,1),但我得到了相同的结果:
提供有关实体的getComponent更多详细资料()方法,我的实体类扩展ComponentProvider有一个地图,组件>,我给它添加一个颇似存储2个浮点数x和y的tionComponent。所以,我没有职位的代码,因为它的工作原理
PS:在黑色部分的右侧是X = 0
你在哪里调用'batch.begin()'和'batch.end()'?我真的不明白是什么导致你的问题。这可能是你如何设置你没有显示的EntityBlock阵列。顺便说一下,白色网格仅用于调试?因为它打破了你的配料。 – Tenfour04
是的,我错过了添加一些代码和网格用于调试,我会稍后更新 – Zetsyog
我会简化代码,以完成你认为你现在正在做的事情,只需要四个手动步骤为块(0,0), (-1,0),(0,-1),( - 1,-1)并查看问题是否存在。我们也看不到get(PositionComponent.class).getX()在做什么,而这似乎是不可或缺的。 – DHa