0

何らかの理由で、ブロックが同じ位置にレンダリングされ続けます。誰でも私を助けることができますか?

Block[][] chunk = new Block[Chunk.CHUNK_WIDTH_BLOCKS][Chunk.CHUNK_HEIGHT_BLOCKS];
    float[][] positions = new float[Chunk.CHUNK_WIDTH_BLOCKS][Chunk.CHUNK_HEIGHT_BLOCKS];
    float frequency = 1.0f / (float) chunk.length; 

    for (int x = 0; x < chunk.length - 1; x++) 
    { 
        for (int y = 0; y < chunk[x].length - 1; y++) 
        { 
            positions[x][y] = SimplexNoise.Generate((float) x * frequency, (float) y * frequency);
            g.drawRect(positions[x][0], positions[0][y], Block.BLOCK_WIDTH, Block.BLOCK_HEIGHT);
        } 
    } 

    for (int x = 0; x < Chunk.CHUNK_WIDTH_BLOCKS; x++)
    {
        for (int y = 0; y < Chunk.CHUNK_HEIGHT_BLOCKS; y++)
        {
            if (positions[x][y] < 0f)
                chunk[x][y] = new Block();
            if (positions[x][y] >= -0f)
                chunk[x][y] = new Block();
        }
}
4

1 に答える 1

1

コードに複数の問題があります。例えば:

for (int x = 0; x < chunk.length - 1; x++) 

それは次のようになります。

for (int x = 0; x < chunk.length; x++)

また、次のことも考慮してください。

g.drawRect(positions[x][0], positions[0][y], Block.BLOCK_WIDTH, Block.BLOCK_HEIGHT);

それは「positions [x] [y]」のすべての値を使用するわけではありません....あなたが望むのは、配列を3Dにすることだと思います...たとえば:

float[][][] positions = new float[Chunk.CHUNK_WIDTH_BLOCKS][Chunk.CHUNK_HEIGHT_BLOCKS][2];

そのように:posistions[x][y][0]はxの値であり、positions[x][y][1]はyの値です....

g.drawRect(positions[x][y][0], positions[x][y][1], Block.BLOCK_WIDTH, Block.BLOCK_HEIGHT);

あなたのコードを正確に理解しているかどうかはわかりませんが、問題があるようです。

于 2013-10-01T04:38:11.590 に答える