gpt4 book ai didi

iphone - Cocos2d 中的 2D Terraria 风格地形生成

转载 作者:行者123 更新时间:2023-12-03 20:15:48 27 4
gpt4 key购买 nike

这个问题我已经困惑了一段时间了。基本上,正如标题所示,我试图生成一个基于图 block 的二维地形,如 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];
}

之后,我用“Blocks”(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];
}

然后我继续在每个 block 下面填充大约十层:

- (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];
}
}
}

这会产生不错的结果,但我希望最终在地面上也能有洞穴和其他 Material ,如果你明白我的意思的话。

我有两个问题:

  1. 这是生成地形的明智方法吗?如果没有,我该怎么办?
  2. 如果这种创建地形的方式没问题,我该如何将洞穴和不同的方 block 类型添加到已生成的地形中。

我希望这一切都有意义,我可以发布图片或回答您可能有的任何问题。

无论如何,谢谢!

编辑:有人吗?

最佳答案

我也做过类似的事情。您需要做的是一个网格,这样您就可以像平铺 map 一样。因此您将能够访问 block 1、4(但它的像素位置会有所不同。

为此,您应该有一个二维数组。要在 Objective C 中执行此操作,您需要有一个包含其他 NSArray 的 NSArray。第一个数组将是第二个数组对象的 Y 位置。例如:[[blockArray objectAtIndex:2] objectAtIndex:5]将得到坐标 (2, 5) 处的 block 。

然后,您可以创建将网格坐标转换为 cocos2D 像素坐标的方法,反之亦然。

使用此网格的主要原因是您需要随时访问某些 block (例如将像素位置转换为网格中的位置),而不是求助于所有数组(女巫将使您的游戏滞后很多)并检查方 block 是否碰撞。

希望对你有帮助!

关于iphone - Cocos2d 中的 2D Terraria 风格地形生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8027300/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com