在写游戏时,我需要一个广阔的世界。因此,我将其分为12x12块(1个单位)的块。
要渲染一个块,我想使用局部坐标:对于每个块,我希望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();
}
我的实体块中的渲染方法:
@Override
public void render(SpriteBatch batch) {
batch.draw(texture, get(PositionComponent.class).getX(), get(PositionComponent.class).getY(), 1f, 1f);
}
这是从(-1; 0)到(0; 1)的4个块的测试图,但我得到了相同的结果:
为了提供有关实体的getComponent()方法的更多详细信息,我的实体类扩展了具有地图ComponentComponent的ComponentProvider,并且我向其中添加了一个存储2个浮点x和y的PositionComponent。所以我没有发布代码,因为它有效
PS:黑色部分的右侧是x = 0。
最佳答案
因此,经过一些实验,我得出了以下结论:负向平移无法按我的要求工作,并且块移位的量太大(仅在spritebatch和shaperenderer正常工作的情况下)。因此,我编写了放错位置的代码,并使用此代码运行了(在World.render()中):
public void render() {
Matrix4 matrix4 = new Matrix4();
for(Chunk chunk : loadedChunks) {
matrix4.setToTranslation((chunk.getX() * Chunk.SIZE) < 0 ? chunk.getX() * Chunk.SIZE + Chunk.SIZE - 1 : chunk.getX() * Chunk.SIZE, chunk.getY() * Chunk.SIZE, 0);
batch.setTransformMatrix(matrix4);
matrix4.setToTranslation(chunk.getX() * Chunk.SIZE, chunk.getY() * Chunk.SIZE, 0);
renderer.setTransformMatrix(matrix4);
chunk.render(batch, renderer);
}
}
这是一个临时解决方案,但可以。
关于java - libgdx翻译很奇怪,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32573571/