繁体   English   中英

块不加载

[英]Chunks don't load

我尝试创建类似我的世界的游戏,但是我在块加载方面遇到了问题。.现在,我仅检查玩家是否在未加载的块中,如果是,则加载此块:

Vector2f cameraPos = new Vector2f(camera.getTransform().getPos().getX(), camera.getTransform().getPos().getZ());
Vector3f currentChunkPos = new Vector3f((float) Math.floor(cameraPos.getX() / Chunk.WIDTH - 0.499f) * Chunk.WIDTH, 0, (float) Math.floor(cameraPos.getY() / Chunk.LENGTH - 0.499f) * Chunk.LENGTH);
System.out.println(currentChunkPos);
if(findChunk(currentChunkPos) == null) {
    loadedChunks.add(new Chunk(currentChunkPos, noise));
}

findChunk():

public Chunk findChunk(Vector3f pos) {
    for(Chunk chunk : loadedChunks) {
        Vector3f cpos = chunk.getTransform().getPos();
        if(pos.getX() == cpos.getX() && pos.getY() == cpos.getY() && pos.getZ() == cpos.getZ()) {
            return chunk;
        }
        if((pos.getX() < cpos.getX()) || (pos.getZ() < cpos.getZ()) || (pos.getX() > cpos.getX() + Chunk.WIDTH) || (pos.getZ() > cpos.getZ() + Chunk.WIDTH)) {
            continue;
        }
        return chunk;
    }
    return null;
}

但是问题是,有时您进入时会直接加载其中的块,如果您位于中间,则有时会加载该块,而一半则不会加载...有人知道我在做什么吗?错误?

因为您只存储块的单个XYZ位置以及大小,然后比较用户在世界上的位置,所以只有当用户以正确的方向“向前”移动时,块才会加载到用户的前面XYZ位置,否则将不满足您的if条件,因为用户的X将高于块X

您需要做的是让每个块都为XY存储一个“块编号”。 假设您的块是50x50,那么您可能将它们编号为:

块数

然后从您将要使用的世界位置算出一部分:

final int chunkSize = 50;

final int[] worldPositions = {241, 186, 30};
final int chunkX = worldPositions[0] / chunkSize;
final int chunkY = worldPositions[1] / chunkSize;
System.out.println("X: " + chunkX + ", Y: " + chunkY); //Output: X: 4, Y: 3

因此,您可以通过从每个值中减去1来加载该块以及围绕它的每个块。 您也不需要块Z因为块XY区域中的所有东西都不管它有多高。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM