2013-02-27 44 views
2

我正在尝试做一个shmup并尝试制作特定的“子弹图案”。基本上,我有一个敌人发射了许多子弹绕过一圈的子弹。让我们说,那个子弹的圈子是正确的。接下来,我想让这个圆自己塌陷,所以我再加上第二个冲动,就是子弹的速度。从本质上讲,这样的子弹被解雇的形状看起来像这样因为它的旅行(我希望这种伪劣符号是有道理的):AS3沿线性路径的额外移动

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); 
      } 
+0

我想这应该可以帮到你:http://math.stackexchange.com/questions/17246/is-there-a-way-to-rotate-the-graph-of-a-function(应用第一个旋转变换遵循循环模式,不能使用sin cos旋转,你必须使用旋转矩阵)。我遇到了这个问题:所以我创建了一个新的矩阵对象 - >由x | y - >翻译过的矩阵内置函数 - >插回x | y,或者您可以自己钻研矩阵计算。 – chadiik 2013-02-27 21:34:58

+1

呵呵,+1教给我的术语[shmup](http://en.wikipedia.org/wiki/Shoot_'em_up)。我几乎一生都在冷淡,甚至都不知道。 – 2013-02-28 02:50:12

+0

如果它在完全水平时工作,只需将其放入一个容器Sprite中,并根据需要旋转和移动它,那么计算就不会受到它的影响,因为子弹始终与其容器相关。 – M4tchB0X3r 2013-03-02 10:12:26

回答

1

你需要做的是让你的clusterGrowth沿任意角度增加和减少。

那么我们如何沿任意角度投影一个点?

var amountOfOffset:Number = 10// how far along the angle you want to go. 
var angleInDegrees:Number = 45; // this is the angle you want it to expand on. 
var angleInRadians:Number = angleInDegrees * 0.0174532925; 
clusterGrowthX = amountOfOffset * cos(angleInRadians); 
clusterGrowthY = amountOfOffset * sin(angleInRadians); 

这应该是你。

你问什么是很一样找到一个圆上的一个点: Find the point with radius and angle

+0

谢谢,从来没有想过要这样做哈哈 – 2013-05-02 18:09:53

0

吐温/ TweenLite的图书馆。修复你所有的问题^ _ ^简单,简单,干净,优化到天堂。