我假设您正在寻找在地形上方的随机位置生成随机精灵。如果是这种情况,并且您正在使用“连接点”类型的地形生成方法,正如 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);