2011-10-26 22 views
0

私は信じられないほどオリジナルなので、船のゲームを作る。それを除いて、問題がある。上記のコードは私の船のクラスであるAS3:ランダムに生成されたオブジェクトをその回転に基づいて移動させる

 var b = new Bullet ; 
     b.x = x; 
     b.y = y; 
     b.rotation = rotation; 
     parent.addChild(b); 
     bullets.push(b); 
     score -= 50; 
     trace(enemybullets[30].x + "," + enemybullets[30].y); 

ので、私は簡単に弾丸が正しいを達成することができます:私はそれが作成時にこのコードを使用しています。..働き、その回転に基づいて、私の船から弾丸を発射する機能を持っています回転。 そして継続的に弾丸のクラスでは、その位置を更新する:すべてがうまく機能

 x += Math.cos(rotation/180 * Math.PI) * speed; 
     y += Math.sin(rotation/180 * Math.PI) * speed; 

ように。しかし、別のクラス、EnemyBulletがあります。これはランダムに生成され、同様のコードを使用して方向と移動を設定します。

 var eb = new EnemyBullet ; 
     eb.x = (Math.random() * 550) - 550; 
     //trace("eb.x is " + eb.x) 
     eb.y = (Math.random() * 400) - 400; 
     //trace("eb.y is " + eb.y); 
     var a1 = eb.y - y; 
     var b1 = eb.x - x; 
     var radians1 = Math.atan2(a1,b1); 
     var degrees1 = radians1/Math.PI/180; 
     eb.rotation = degrees1; 
     if (enemybullets.length < 50) 
     { 
      parent.addChild(eb); 
      enemybullets.push(eb); 
     } 

そしてEnemyBulletクラスで:私の船のクラスでは、彼らは確かに私の画面上に表示されないので、

 x += Math.cos(rotation/180 * Math.PI) * speed; 
     y += Math.sin(rotation/180 * Math.PI) * speed; 

私は、私の弾丸の一つが行く場所を追跡するトレースを設定しています..ここに私のトレースの結果があります:

x: 121.55, y:-162.05 
x: 1197.05, y:-162.05 
x: 1842.35, y:-162.05 
x: 2368.15, y:-162.05 
x: 2547.4, y:-162.05 
x: 2702.75, y:-162.05 
x: 2882, y:-162.05 

ローテーションは常に水平ですが、私の人生にとっては不可能なのですか?誰でも私に答えを与えることができますか?回転をセットアップするために使用したコードは、マウスの方にムービークリップを回転させるのに使用したのと同じ作業コードなので、これは簡単です。

アイデアはありますか?

Ta!

答えて

0

ラジアンから度への変換は、バグが含まれています

var degrees1 = radians1/Math.PI/180; 

は次のようになります。

var degrees1 = radians1/Math.PI * 180; 

それともそれをより理解できるようにする:おそらくあなたのケースのdegrees1で

var degrees1 = 180 * radians1/Math.PI; 

0に近い値です。動きは常に水平です。

+0

これは、私が必要とするものとは逆の回転を与えます - 回転から180を取ることによって、すべてがうまくいきます。なぜラジアン度の変換が私のマウス回転スクリプトではなく、このスクリプトでは機能しないのでしょうか?乾杯! – hazdog

+0

私は考えていない、私はまずマウス回転スクリプトのソースを参照する必要があります。おそらく、ラジアンを度に変換する計算が正しく機能していたのかもしれません。 私の答えを明確にするには:乗算と除算の演算子の優先順位は同じです。計算は左から右に処理されます。あなたの場合、ラジアン1は最初にMath.PIで除算され、その結果は180で除算されます(値がさらに小さくなります)。 – Josha

関連する問題