2

对于我正在处理的 Flash 游戏项目,我想创建一个应该能够通过光线投射检测玩家的相机。摄像机应该能够具有不同的视角(例如 45 度或 90 度),并且根据这些视角,光线投射应该有所不同。使用光线投射创建实际视角不会引起问题,但是,由于某些超出我的原因,这些视角所在的角度是错误的。

这是我使用的代码:

for (var i:Number = 0; i < this._viewAngle; i++)
{
    var pointX:Number = (this._viewRange) * Math.cos(this._viewAngle + (i * Math.PI / 180));
    var pointY:Number = (this._viewRange) * Math.sin(this._viewAngle + (i * Math.PI / 180));
    this._rayHolder.graphics.lineTo(pointX, pointY);
    this._rayHolder.graphics.moveTo(0, 0);
}

结果是这样的:
(90度)

摄像头90度

(45度)

摄像头45度

我希望我写的内容可以理解,因为我不知道如何更清楚地解释它如果有人能阐明我在这里做错了什么,那就太棒了。

编辑:
更改Math.cos(this._viewAngle + (i * Math.PI / 180));Math.cos((this._viewAngle + i) * Math.PI / 180);结果:

(90度)

摄像头90度

(45度)

在此处输入图像描述

4

1 回答 1

4

我认为您的更新已接近尾声。正如 Sunil D 指出的那样,您可能只想对齐视锥,使其中心与垂直方向成 90°。换句话说,从 开始-_viewAngle * 0.5

for (var i:Number = 0; i < this._viewAngle; i++)
{
    var pointX:Number = (this._viewRange) * Math.cos((-this._viewAngle * 0.5 + i) * Math.PI / 180);
    var pointY:Number = (this._viewRange) * Math.sin((-this._viewAngle * 0.5 + i) * Math.PI / 180);
    this._rayHolder.graphics.lineTo(pointX, pointY);
    this._rayHolder.graphics.moveTo(0, 0);
}

编辑:虽然这些方程适用于此应用程序,但以下方程更准确地反映了 Flash 的奇数坐标系。具体来说,正 x 向右,正 y 向下:

for (var i:Number = 0; i < this._viewAngle; i++)
{
    var pointX:Number = (this._viewRange) * Math.sin((90 - this._viewAngle * 0.5 + i) * Math.PI / 180);
    var pointY:Number = (this._viewRange) * -Math.cos((90 - this._viewAngle * 0.5 + i) * Math.PI / 180);
    graphics.lineTo(pointX + 100, pointY + 100);
    graphics.moveTo(100, 100);
}
于 2013-06-29T20:15:59.910 回答