【发布时间】:2013-10-16 03:19:19
【问题描述】:
我正在开发一个用 C++ 编写的视频游戏,我正在尝试根据给定的半径创建怪物生成点,假设我定义了这样的位置:
Position ( X, Y, Z ) Amount ( Value )
该代码所做的是起点是位置,我想在起点周围放置(数量)怪物(X = X-Amount,Y = Y-Amount,X = X+Amount,Y = Y+数量),每个生成最多有 9 个怪物。
我现在正在使用的代码很无聊:
// 1000 tries because I'm using random numbers
for (int i = 0; i < 1000; i++)
{
toPlace = centerPos;
toPlace.x = uniform_random(centerPos.x-monsterAmount, centerPos.x+monsterAmount);
toPlace.y = uniform_random(centerPos.y-monsterAmount, centerPos.y+monsterAmount);
if (Monster->CanSpawnAt(toPlace))
{
Monster->Spawn();
break;
}
}
位置计算是使用monsterAmount(用户定义的怪物数量),所以如果有3个怪物,那么它是-3后面+3个位置。
这很糟糕,因为我使用的是随机值,因此我在 1000 的 for 循环中,因为有时怪物无法在给定位置生成。
有时怪物会彼此相邻生成,我真的不希望这样。我想知道你们是否可以帮助我,告诉我我应该使用什么数学算法来完成这类任务?
【问题讨论】:
-
你问的是如何将一些怪物散布成一个圆圈?位置周围有 2*pi 弧度。将其除以 2*monsters+1,让您在该位置周围获得相等的分布。至于它们无法在某些区域生成,我想您将不得不为此使用碰撞检测和解决方案。
-
我不明白 2*pi 弧度是什么意思,
-
一个圆有 360 度或 2 倍 pi (3.14...) 弧度。我说弧度是因为大多数三角函数依赖于弧度而不是度数。
-
问题是我没有使用圆形,我使用的是多种形状的地图、正方形、圆形等……每个生成点(X、Y)都不同。
-
哦,这就是我问的原因。你说你试图在某个半径附近产卵。半径是圆的长度的一半。这就是为什么我将它与一个圆圈联系起来。