【问题标题】:Wrong angle while drawing a partial circle with AS3使用 AS3 绘制部分圆时角度错误
【发布时间】:2013-06-29 18:49:18
【问题描述】:

对于我正在开发的一个 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度)

【问题讨论】:

  • 您似乎没有将 _viewAngle 转换为弧度。
  • 同意。另外,也许我不明白,但是在阅读您的代码时,我留下的印象是_viewAngle 被用于两种不同的事情。 1)迭代它以创建“视野”,2)然后将其添加到 sin/cos 中使用的角度,就好像它也是相机指向的角度一样。
  • @DavidMear 我相信我确实使用* Math.PI / 180 转换为弧度。反过来 (* 180 / Math.PI) 应该会产生度数。我只是在我的问题中将它们命名错误。
  • @SunilD。是的,我使用了两次_viewAngle 变量。我这样做是为了在视野中为每个弧度/度画一条线。
  • 最新结果更接近我的预期。您将 i 转换为弧度,但不是 _viewAngle。现在我还期望相机角度和“视野”角度是两个不同的变量。这样您就可以将相机的角度添加到 i 而不是“视野”角度。最后,您还希望视野的一半在一侧,另一半在另一侧,而不是全部在一侧。希望我说得通。

标签: actionscript-3 drawing angle


【解决方案1】:

我认为您的更新已接近尾声。正如 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);
}

【讨论】:

  • 虽然我仍然不太明白为什么 45˚ 测试会导致视野居中(相对)它应该在的左侧(相对)而 90˚ 测试导致视野从右侧居中的视图来看,此解决方案非常有效。谢谢大卫和苏尼尔。
  • 您是从_viewAngle开始视觉锥绘制的,因此如果 0˚ 指向正上方,则 45˚ 测试从对角线开始右上角,90 测试开始从直接到右侧。
猜你喜欢
  • 1970-01-01
  • 2017-09-12
  • 1970-01-01
  • 2015-12-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多