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

标签 iphone cocos2d-iphone terrain

这个问题我已经困惑了一段时间了。基本上,正如标题所示,我试图生成一个基于图 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/

相关文章:

ios - 如何在MapView ios9中绘制PolyLine

ios - 快速加载 UITableViewCell 中的 MKMapView

ios - 点击后Cocos2d运行代码

ios - Cocos2D : How to send events between different classes

iphone - 使用 cocos2d 应用程序降低功耗的可能性

algorithm - 这个中点位移算法的 'roughness constant'是多少,如何修改?

javascript - Three.js中如何获取透视相机的 Angular 值?

algorithm - 来自两个输入的伪随机数生成器

iphone - 如何在 UIWebView 中加载带有 HTML 文件的图像

iphone - 容器类的内存管理