Я некоторое время ломал голову над этим.По сути, я пытаюсь, как следует из названия, создать двухмерный ландшафт на основе тайлов, как в Terraria .На данный момент я в основном просто генерирую группу случайных точек, которые в конечном итоге станут верхним слоем ландшафта, который выглядит следующим образом:
- (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];
}
Затем я продолжаю заполнять около десяти слоев под каждым блоком:
- (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];
}
}
}
Это дает приличные результаты, но я бы хотел в конечном итогеу вас также есть пещеры и другие материалы в земле, если вы понимаете, о чем я.
У меня два вопроса:
- Это мудрый способ создания ландшафта?Если нет, то как мне это сделать?
- Если этот способ создания ландшафта в порядке, как именно я продолжу добавлять пещеры и блоки разных типов в уже сгенерированный ландшафт.
Я надеюсь, что все это имеет смысл, и я могу публиковать фотографии или отвечать на любые ваши вопросы.
В любом случае, спасибо!
РЕДАКТИРОВАТЬ: Кто-нибудь?