[英]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;
}
但是问题是,有时您进入时会直接加载其中的块,如果您位于中间,则有时会加载该块,而一半则不会加载...有人知道我在做什么吗?错误?
因为您只存储块的单个X
, Y
和Z
位置以及大小,然后比较用户在世界上的位置,所以只有当用户以正确的方向“向前”移动时,块才会加载到用户的前面X
, Y
和Z
位置,否则将不满足您的if条件,因为用户的X
将高于块X
您需要做的是让每个块都为X
和Y
存储一个“块编号”。 假设您的块是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
因为块X
和Y
区域中的所有东西都不管它有多高。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.