我试图让我的游戏角色(鱼类)只能根据他们当前的视锥能够“看到”来到新生成的目的地,因此我绘制了一个三角形MC,使其成为视锥和从那里产生锥体区域内的随机点,我使用的代码如下所示,它不断返回我的舞台的顶部坐标为什么会这样?我做了一个localToGlobal,它仍然是相同的
public function getRandomDestination():void
{
//Math.floor(Math.random()*(1+High-Low))+Low;
var conePoint:Point = new Point(Math.floor(Math.random() * cone.width), Math.floor(Math.random() * cone.height));
_destinationX = localToGlobal(conePoint).x;//Math.floor(Math.random()*(1+_maxX-100)+100);
trace(_destinationX);
_destinationY = localToGlobal(conePoint).y; //Math.floor(Math.random() *(1+_maxY-100)+100);
trace(_destinationY);
}
答案 0 :(得分:2)
首先选择随机角度(在指定的半径范围内)然后使用该角度选择与鱼的随机距离不是更容易吗?
类似的东西:
function selectPosition(maxAngle:Number, maxDistance:Number):Object
{
var base:Number = rotation + (-(maxAngle/2) + Math.random()*maxAngle);
var radians:Number = base / 180 * Math.PI;
var dist:Number = Math.random()*maxDistance;
return {
x: Math.cos(radians) * dist,
y: Math.sin(radians) * dist
};
}
var result:Object = selectPosition(30, 100);
trace(result.x, result.y);
将返回一个包含x和y点的对象,该点落在指定的角度和距离内。
以上可以直观地表示:
答案 1 :(得分:1)
计算矩形中随机点的方式无效。 首先,您使用的是矩形而非锥形(圆锥是三维几何形状)。这是我如何计算矩形内的随机点(我将使用等腰三角形)
警告:惊人的MSPaint技能。
首先,我们使用y
获取Math.randon()
轴上的位置。女巫会给我们一个0到1之间的随机值(称之为rndY
)。
接下来,我们需要计算x
轴上的位置。我们这样计算:
rndX = 0.5 - rndY/2 + rndY * Math.random()
这可以确保x
轴上的位置始终位于三角形内。
要解决您的localtoglobal问题更多来源或fla会有所帮助。