私はしばらくこれについて困惑してきました。基本的に、タイトルが示すように、 Terrariaのようなタイル ベースの 2 次元地形を生成しようとしています。現時点では、基本的に、最終的に地形の最上層となる一連のランダム ポイントを生成しているだけです。これは次のようになります。
- (void)generatePoints
{
float x = 0;
float y = 0;
self.topTerrainPoints = [[CCArray alloc] initWithCapacity:terrainKeyPoints];
for (int i = 0; i < terrainKeyPoints; i++) {
_terrainPoints[i] = CGPointMake(x, y);
if (i != 0) {
int newElevation = [self getRandomElevation];
x += 64;
y += newElevation;
CCLOG(@"Point added!");
}
}
[self populatePointsWithBlocks];
}
その後、それらのポイントに「ブロック」(CCSprite のサブクラス) を設定します。
- (void)populatePointsWithBlocks
{
for (int i = 0; i < terrainKeyPoints; i++) {
Block *tile = [[Block alloc] initWithType:kBlockTypeGrass];
tile.position = ccp(_terrainPoints[i].x, _terrainPoints[i].y);
[self addChild:tile];
[self.topTerrainPoints addObject:tile];
CCLOG(@"Tile added!");
}
[self fillInGround];
}
次に、各ブロックの下にある約 10 層を塗りつぶします。
- (void)fillInGround
{
for (int j = 1; j < terrainMaxDepth; j++) {
for (int i = 0; i < terrainKeyPoints; i++) {
CGPoint newPoint = CGPointMake(_terrainPoints[i].x, _terrainPoints[i].y - 64 * j);
Block *dirt = [[Block alloc] initWithType:kBlockTypeDirt];
dirt.position = newPoint;
[self addChild:dirt];
}
}
}
これでまともな結果が得られますが、最終的には地面に洞窟やその他の素材を入れたいと思っています。
2 つの質問があります。
- これは地形を生成する賢明な方法ですか? そうでない場合、どのようにすればよいですか?
- 地形を作成するこの方法で問題がなければ、既に生成された地形に洞窟やさまざまな種類のブロックを追加するにはどうすればよいでしょうか。
これがすべて理にかなっていることを願っています。写真を投稿したり、質問に答えたりできます。
とりあえずありがとう!
編集:誰か?