Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 块不';t载荷_Java_Lwjgl - Fatal编程技术网

Java 块不';t载荷

Java 块不';t载荷,java,lwjgl,Java,Lwjgl,我试图创建一个像minecraft这样的游戏,但我在区块加载方面遇到了问题。。 现在,我只检查播放器是否在未加载的区块中,如果这是真的,我将加载此区块: Vector2f cameraPos = new Vector2f(camera.getTransform().getPos().getX(), camera.getTransform().getPos().getZ()); Vector3f currentChunkPos = new Vector3f((float) Math.floor(c

我试图创建一个像minecraft这样的游戏,但我在区块加载方面遇到了问题。。 现在,我只检查播放器是否在未加载的区块中,如果这是真的,我将加载此区块:

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(块:loadedChunks){
Vector3f cpos=chunk.getTransform().getPos();
if(pos.getX()==cpos.getX()&&pos.getY()==cpos.getY()&&pos.getZ()==cpos.getZ()){
返回块;
}
if((pos.getX()cpos.getX()+Chunk.WIDTH)|(pos.getZ()>cpos.getZ()+Chunk.WIDTH)){
继续;
}
返回块;
}
返回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
区域中的一切,不管它有多高

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