簡體   English   中英

libgdx翻譯很奇怪

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM