2011-10-26 39 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; 

或者以使其更容易理解:

var degrees1 = 180 * radians1/Math.PI; 

你的情況degrees1可能值接近0;所以運動總是水平的。

+0

這給了我相反的旋轉我所需要的 - 無所謂,通過從旋轉180,一切都很好。任何想法爲什麼弧度 - 度轉換適用於我的鼠標旋轉腳本,而不是這個?乾杯! – hazdog

+0

我不知道,我首先必須看到鼠標旋轉腳本的來源。也許在那裏,將弧度轉換爲度的計算工作正確。 爲了弄清楚我的答案:乘法和除法運算符優先級相同;計算從左到右進行處理。在你的情況下,radians1首先被Math.PI分割,結果除以180(使得值更小)。 – Josha