我一直在困惑這一段時間。基本上,正如標題所說,我試圖生成一個基於瓦片的二維地形,如Terraria。截至目前,我基本上只產生一堆隨機點最終將地形的頂層,它看起來像這樣:2D在Cocos2d中生成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];
}
我則繼續在大約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];
}
}
}
這將產生不錯的結果,但我希望最終有洞穴和行吟詩人如果你知道我的意思,那麼地面材料也是如此。
我有兩個問題:
- 這是生成地形的一個明智的方法是什麼?如果不是,我該怎麼做?
- 如果這種創建地形的方式很好,我會如何着手將洞穴和不同的塊類型添加到已經生成的地形中。
我希望這一切都有道理,我可以發佈圖片或回答您可能遇到的任何問題。
無論如何,謝謝!
編輯:任何人?
作爲進一步研究的起點:http://en.wikipedia.org/wiki/Voronoi_diagram – LearnCocos2D
這很有趣,我一定會閱讀這個,謝謝。 – tallen11
你確定你需要地形生成嗎?也許它不適合你的遊戲,但你總是可以使用像LevelHelper這樣的工具來事先創建關卡。您可以創建不同類型的塊並對其進行編碼,然後只需拖放即可創建級別。 http://www.levelhelper.org/ – akuritsu