对于我正在研究的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度)
(45度)
我希望我所写的内容是可以理解的,因为我不知道如何更清楚地解释它如果有人能够解释我在这里做错了什么,那将是非常棒的。
编辑:
将Math.cos(this._viewAngle + (i * Math.PI / 180));
更改为Math.cos((this._viewAngle + i) * Math.PI / 180);
会产生以下结果:
(90度)
(45度)
答案 0 :(得分: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);
}