2013-10-27 86 views
1

我正在製作一個遊戲,屏幕頂部的昆蟲落下。遊戲的目的是殺死這些昆蟲。我已經爲這些昆蟲的移動方式做了一個代碼,但是問題似乎是它們似乎以不平滑的方式旋轉。他們抽搐! 這是代碼:如何讓我的對象在我的遊戲中更平滑地旋轉?

else // Enemy is still alive and moving across the screen 
    { 
     //rotate the enemy between 10-5 degrees 
     tempEnemy.rotation += (Math.round(Math.random()*10-5)); 
     //Find the rotation and move the x position that direction 
     tempEnemy.x -= (Math.sin((Math.PI/180)*tempEnemy.rotation))*tempEnemy.speed; 
     tempEnemy.y += (Math.cos((Math.PI/180)*tempEnemy.rotation))*tempEnemy.speed; 
     if (tempEnemy.x < 0) 
     { 
      tempEnemy.x = 0; 
     } 
     if (tempEnemy.x > stage.stageWidth) 
     { 
      tempEnemy.x = stage.stageWidth; 
     } 
     if (tempEnemy.y > stage.stageHeight) 
     { 
      removeEnemy(i); 

      lives--; 
      roachLevel.lives_txt.text = String(lives); 
     } 
    } 
} 

} ,我遇到的是一些昆蟲沿着屏幕的邊緣去另一個問題。用戶幾乎可以殺死他們,因爲他們一半的身體在屏幕上,而另一半則關閉。我可以讓它們從邊緣移開一點,就像偏移一樣?謝謝!

+0

你每一幀這樣做呢? – Pier

+0

我正在對數組中的每個對象執行此操作。沒有動畫,全部由動作腳本提供動力 – user2896120

+0

如果在每個幀處更改某些內容(x,y,旋轉),動畫也可以通過動作發生。您錯誤地認爲只有在時間軸上使用關鍵幀等時纔會發生動畫。這裏有一本很好的書,只是用AS3中的代碼來動畫的東西。 http://www.amazon.com/Foundation-Actionscript-3-0-Animation-Making/dp/1590597915 – Pier

回答

0

從你的代碼,它看起來像他們在顫抖,因爲你被大量改變旋轉馬上:

tempEnemy.rotation += (Math.round(Math.random()*10-5)); 

相反,你應該插值/動畫到你想要的旋轉,而不是隻跳權到它。有幾種方法可以做到這一點,但不知道你的動畫是如何設置的。

爲了防止昆蟲從屏幕邊緣移動到屏幕邊緣,可以放置偏移量並限制x/y位置。

如去:

var offset:int = 100; // limits the max x to be 100 pixels from the right edge of the stage 

if (tempEnemy.x > (stage.stageWidth - offset)){ 
    tempEnemy.x = stage.stageWidth - offset; 
} 
+0

我唯一擁有的動畫是昆蟲的雙腿移動。旋轉和移動由動作提供動力。我不想要一個大的旋轉,只是一些旋轉,昆蟲可以在它向下移動時改變方向。旋轉和移動都應該是隨機的 – user2896120

+0

我會猜測並假設您的上面的代碼正在每幀運行。直接每幀應用一點點隨機旋轉就會導致其本質上的顫抖行爲。如果您繪製出以下數值,您可以看到這一點:Math.round(Math.random()* 10-5);您會看到一系列隨機跳躍,產生鋸齒線,而不是您想要的平滑動作。 – mitim

+1

我建議使用不同的方法來產生平滑的隨機行爲。有點複雜,但也許看看植絨算法(即轉向/遊蕩部分)。 – mitim