2011-09-04 91 views
0

當我嘗試旋轉我的射彈以及船的旋轉時,我遇到了很大的問題。射擊時發生旋轉問題

我希望我的飛船一次拍攝兩張照片。因此,我使用了我的第一批射彈,並將它們放置在船的右側(左側一個,右側一個)。到現在爲止還挺好。

但是當我用我的太空船射擊時,我轉過身來看射彈的旋轉看起來很奇怪。這很難描述,所以這裏是一個顯示錯誤行爲的圖像。

http://imageshack.us/photo/my-images/841/projectilebug.jpg

我與飛船旋轉彈ALONG,使其看起來非常好巨大的問題。目前只有一個鏡頭。當我旋轉並立即開火時,我的射擊會被搞砸。 目標是創建一個雙擊發射炮,如圖所示。

下面是一些代碼,放置在船的左邊彈(即並未真正發揮作用):

var projectileRadians:Number = (player.frame/180) * 3.14159; 

tempProjectile.x = (player.point.x + 6) + Math.cos(projectileRadians); 
tempProjectile.y = (player.point.y + 3) + Math.sin(projectileRadians); 

的速度編碼:

tempProjectile.nextX = tempProjectile.x; 
tempProjectile.nextY = tempProjectile.y; 
tempProjectile.dx = rotationVectorList[player.frame].x; 
tempProjectile.dy = rotationVectorList[player.frame].y; 

這將更新的位置:

nextX += (dx * (speed + Math.abs(xAdjust))) * step; 
nextY += (dy * (speed + Math.abs(yAdjust))) * step; 
+0

了拋射開始位置的符號只是故事的一半。您還需要查看拋射體的速度矢量。還想發佈該代碼? –

+0

tempProjectile.nextX = tempProjectile.x; tempProjectile.nextY = tempProjectile.y; \t \t \t tempProjectile.dx = rotationVectorList [player.frame] .X; tempProjectile.dy = rotationVectorList [player.frame] .Y; 這將更新位置: nextX + =(DX *(速度+ Math.abs(xAdjust)))*步驟; nextY + =(DY *(速度+ Math.abs(yAdjust)))*步驟; – drpelz

+0

好的。我很抱歉遲到的回覆,但同時我還要做其他一些事情。我找到了問題!:)這是我的錯。我的旋轉點有不正確的值,所以它沒有正確旋轉。我修改並調整了我的旋轉點,現在它正在工作。無論如何感謝您的幫助!:) – drpelz

回答

1

速度代碼看起來沒問題。你似乎沒有正確計算槍的位置。

編輯:我們沒有使用標準的trig參考框架;相反,我們使用一個角度= 0意味着向上和角度增加順時針旋轉。所以我們採取標準的使用和交換sincos

這裏,gxgy表示槍相對於船舶移動座標的座標。我們需要旋轉向量< GX,GY由角度>將它添加到船COORDS前:

cs = Math.cos(projectileRadians); 
sn = Math.sin(projectileRadians); 
tempProjectile.x = player.point.x + gx * sn - gy * cs; 
tempProjectile.y = player.point.y + gx * cs + gy * sn; 

這將是一個很好的優化,限制船舶的角度爲特定值(也許每5度),並提前把所有的trig函數放到一個表中。 Trig函數計算起來很昂貴。

請注意,這也假設正Y是「上」。計算機圖形往往開始(0,0)在左上角和對Y當你向下移動,所以你可能要切換Y.

+0

謝謝!我會盡快嘗試!非常感謝!:) – drpelz

+0

嗯,沒有真正的工作。看到這張照片我的意思是:http://imageshack.us/photo/my-images/534/rotation.jpg 目前我的代碼是這樣的: var projectileRadians:Number =(player.frame/180)* Math.PI; \t \t \t \t \t \t \t \t \t \t \t \t \t VAR CS:總數= Math.cos(projectileRadians); var sn:Number = Math.sin(projectileRadians); \t \t \t \t var gunX:int = 8; var gunY:int = 8; \t \t \t \t VAR槍口:點=新點(gunX,gunY); \t \t \t \t \t \t \t tempProjectile.x =(player.point.x + player.bitmapSize/2)+ gunPoint.x * CS - gunPoint.y * SN; tempProjectile.y =(player.point.y + player.bitmapSize/2)+ gunPoint.x * sn + gunPoint.y * cs; – drpelz

+0

我爲您製作了視頻:http://www.youtube.com/watch?v = -hrC1dLGF7g – drpelz