在我寫作的遊戲中,我需要一個巨大的世界。所以我把它分成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