[英]Libgdx translation weird
在寫游戲時,我需要一個廣闊的世界。 因此,我將其分為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()方法的更多詳細信息,我的實體類擴展了具有映射的ComponentProvider,Component>,我向其中添加了一個位置組件,該位置組件存儲2個浮點x和y。 所以我沒有發布代碼,因為它有效
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);
}
}
這是一個臨時解決方案,但可以。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.