最近、C++をもっと使い始めました。私はJavaを学ぶときに行ったことのクローンである基本的なボクセルゲームを作成しています。マップ内に格納されたクラスのコール関数
メインゲームループは、World
クラスのdraw()
メソッドを呼び出し、すべてのチャンクをループし、チャンクの描画メソッドを呼び出します。メモリの使用量を節約し、非正方形の世界を持たせるために、チャンクはチャンクの位置を格納するクラスであるマップに格納されます(chunk space
)。私は一度だけ呼び出されると仮定されたチャンクメッシュを構築するためのコードが呼び出されているので、私は現在、map
にchunks
に.draw()
関数を呼び出しています方法が正しくないと信じ
(チャンクスペースは基本的にchunkx = floor(worldx/chunksize)
です)何度も。
世界の描画機能:
void World::draw() {
std::map<ChunkPosition, Chunk>::iterator it = chunks.begin();
while (it != chunks.end()) {
ChunkPosition pos = it->first;
Chunk chunk = it->second; // I think I may need to use a pointer here somehow
chunk->draw();
it++;
}
}
チャンクの描画機能:
void Chunk::draw() {
if(build){ // should only "build" the mesh once, is initialized to true
build = false;
... mesh building code that is not relevant ...
std::cout << verticeSize << std::endl; // this is called every loop cycle instead of once
mesh.build (vertices, verticeSize, indices, indiceSize);
}
mesh.draw(); // draw the mesh every cycle
}
そしてここでは、チャンク・クラスの構造
class Chunk {
private:
static const int size = 25;
std::map<Location, Block> blocks;
Mesh mesh;
bool build = true;
public:
void setBlock (Location, Block&);
void setBlock (int, int, int, Block&);
Block *getBlock (Location);
Block *getBlock (int, int, int);
bool hasBlock (Location);
bool hasBlock (int, int, int);
void draw();
};
である私はchunks
に単一のチャンクを持っていますポジションは(0,0,0)
です。それに関する他のすべては、質問とは無関係です。
'チャンクのチャンク= IT->第二;'コピーを避けるには 'Chunk&chunk = it-> second;'でなければなりません。 – Jarod42