【发布时间】:2013-02-27 20:58:11
【问题描述】:
我正在尝试制作 shmup 并尝试制作特定的“子弹图案”。基本上,我有一个敌人发射了一些围绕一个圆圈移动的子弹。假设那个子弹圈向右移动。接下来,我希望圆自行塌陷,因此我在子弹的 x 和 y 速度上添加了第二个脉冲。从本质上讲,发射的子弹的形状在行进时看起来像这样(我希望这种粗制滥造的符号是有意义的):
O o • o O
这行得通。
然后我只想让它折叠它的垂直定位,而不是水平放置,所以它看起来像这样:
O — O
我也可以这样做。但是,如果我尝试沿对角线拍摄这个圆圈,或者在完全水平或垂直之外的方向拍摄,它会有点崩溃。
这是我正在使用的代码,clusterGrowthX & Y 部分是我遇到问题的部分。解决方案可能正盯着我看,但我现在无法弄清楚。有任何问题,尽管问。谢谢。
for(var j:int = 0; j < _info.clusterAmount; j++)
{
var around : Number = _info.angle - (_info.clusterRange/2) + (_info.clusterRange/_info.clusterAmount/2) + j * (_info.clusterRange/_info.clusterAmount);
var xOff : Number = (Math.cos(around) * _info.clusterRadius);
var yOff : Number = (Math.sin(around) * _info.clusterRadius);
var bullet = new _info.bulletShape(_info);
bullet.x = startPoint.x + xOff;
bullet.y = startPoint.y + yOff;
if(_info.dParent is PlayerControl)
{
bullet.x += Math.cos(_info.angle) * 40;
bullet.y += Math.sin(_info.angle) * 40;
}
var sign : Number = (_info.angle < 0) ? -1 : 1;
trace(Math.cos(around),Math.sin(around));
bullet.info.vx += Math.cos(around) * _info.clusterGrowthX;
bullet.info.vy += Math.sin(around) * _info.clusterGrowthY;
bullet.rotation = _info.angle * 180 / Math.PI;
_info.dLevel.addChild(bullet);
}
【问题讨论】:
-
我想这应该对你有所帮助:math.stackexchange.com/questions/17246/…(在应用第一次旋转变换以遵循盘旋模式后,你不能再使用 sin cos 旋转,你必须使用旋转矩阵)。我遇到了这个问题:所以我创建了一个新的矩阵对象 -> 由 x|y 翻译 -> 使用内置函数旋转矩阵 -> 插入 x|y 或者您可以自己深入研究矩阵计算。
-
哈哈,+1 教我shmup 这个词。我几乎一生都在打嗝,甚至都不知道。
-
如果它在完全水平时工作,只需将它放入容器 Sprite 中并根据需要旋转和移动它,你的计算就不会受到它的影响,因为子弹总是相对于它的容器。
标签: actionscript-3 math actionscript