0

我正在使用 Cocos2d/Box2d 创建一个“无尽的跑步者”,我正在使用 CCFollow 将我的相机设置在主要的跑步角色上。(是的,我在 X 和 Y 值中滚动得很深)。现在,我已经创建了这个游戏的一部分,它已经太大了。我在固定位置一次生成所有的身体/精灵。(类似于 X 轴的 1500 和 Y 轴的 -1500)。

但是对于优化问题和我的游戏的性质(即无尽的跑步者)是错误的,我必须在随机位置生成随机高度的随机山丘。可能我只会使用 4 到 5 个地形,并通过改变它们上面的障碍物来重复使用它们,这样它们看起来就不会重复。

请记住,由于地形的复杂性,我没有使用任何循环来生成山丘/精灵。我是手动做的!

RayWenderlich有一个关于“像小翅膀一样的游戏”的很棒的教程,我研究了它的“resetHillVertices”方法,但这对我没有帮助,因为我有各种不同的精灵/身体,我必须在运行时以不同的方式生成随机位置。任何帮助,将不胜感激。谢谢

4

1 回答 1

0

我假设您正在寻找在地形上方的随机位置生成随机精灵。如果是这种情况,并且您正在使用“连接点”类型的地形生成方法,正如 Ray Wenderlich 所描述的,您可以在地图生成期间为对象创建条目(不是实际的精灵,但有足够的信息来创建它们) (游戏前)。

您可以使用 Ray 的剪裁方法在运行时生成精灵,并在它们经过您身后的剪裁平面时将其销毁。

至于将物品随机放置在地形上方,我建议选择一条随机的地形线,将物品“滑动”到该线上的随机点,然后将其从该线上投射(朝向天空)。就像是:

        float slope = (point2.y - point1.y) / (point2.x - point1.x);

        CGPoint randomPositionOnLine;
        randomPositionOnLine.x = point1.x + (arc4random( ) % ((int) (point2.x - point1.x)));
        randomPositionOnLine.y = randomPositionOnLine.x * slope;

        float angleOfLine = atanf(slope);

        float angleOfNormal = angleOfLine + (M_PI / 2);

        int maxHeightAboveTerrainToPlaceItem = 200;
        float heightAboveTerrain = (arc4random( ) % maxHeightAboveTerrainToPlaceItem);

        CGPoint itemPosition;
        itemPosition.x = randomPositionOnLine.x + (cosf(angleOfNormal) * heightAboveTerrain);
        itemPosition.y = randomPositionOnLine.y + (sinf(angleOfNormal) * heightAboveTerrain);
于 2012-08-08T06:35:47.833 回答