gpt4 book ai didi

java - Libgdx 翻译奇怪

转载 作者:太空宇宙 更新时间:2023-11-04 13:26:50 24 4
gpt4 key购买 nike

在我正在编写的游戏中,我需要一个巨大的世界。所以我把它分成 12x12 block (1 个单元)。

为了渲染一个 block ,我想使用本地坐标:对于每个 block ,我希望 0;0 位于该 block 的左下角。

enter image description here

在绿色世界坐标系中,1;1 是 1 个 block , block 也一样,只是原点发生了变化。

为此,我在 SpriteBatch 中使用了一个变换矩阵,它具有 chunk_x * block 大小和 chunk_y * block 大小的转换。但对于 block 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);
}
}

我用单独的方法更新相机。这是 block 渲染代码:

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();
}

我的实体 block 中的渲染方法:

 @Override
public void render(SpriteBatch batch) {
batch.draw(texture, get(PositionComponent.class).getX(), get(PositionComponent.class).getY(), 1f, 1f);
}

这是从 (-1;0) 到 (0;1) 的 4 个 block 的测试图,但我得到了相同的结果:

enter image description here

为了提供有关实体的 getComponent() 方法的更多详细信息,我的实体类扩展了具有映射 Component> 的 ComponentProvider,并向其中添加了一个存储 2 个 float x 和 y 的 PositionComponent。所以我没有发布代码,因为它有效

PS:黑色部分右边是x = 0。

最佳答案

所以经过一些实验,我得出了这样的结论:负翻译没有按照我想要的方式工作,并且 block 的移动量太大(仅在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com