2014-01-12 355 views
0

我正在製作一款基於射手的遊戲。 我的射手是在屏幕的中間,我可以接觸與event.x,event.y屏幕時,移動射擊的旋轉,但我的問題: 我想打一個按鈕,從拍攝的子彈射手朝着射手所展現的方向發展。 我知道我可以用三角函數解決這個問題,但我正在尋找一種更簡單的方法。 任何人都知道如何做一個輪換過渡? 謝謝 Fannick自轉球(轉換)

+0

你有什麼累了這麼遠嗎? – agconti

+0

好了,現在什麼都沒有,我知道這可能與三角做,我只是想辯別如何解決這個問題,我imaginated創建一個無形的圈子,和方向的射手正顯示出將被顯示爲點在圈子上做轉型。 (圓實際上離開了屏幕,所以從中心開始,以半徑250爲例) – Fannick

回答

0

他就是這樣! :)從中間的一個物體開始,隨着物體的旋轉度數,它將定義子彈在過渡到的位置,請注意「c」是射手,「h」是display.contentHeight和「 w「display.contentWidth。我還將bulletX和bulletY定義爲子彈的第二個位置。

if c.rotation <= math.deg(math.atan((h/2)/(w/2))) and c.rotation >= 0 then 
    bulletX = w 
    bulletY = h/2 + w/2 * math.tan((c.rotation * math.pi)/180) 

elseif c.rotation > math.tan(math.rad((h/2)/(w/2))) and c.rotation <= 90 then 

    bulletX = w/2 + math.tan((90 * math.pi)/180 - (c.rotation * math.pi)/180) * h/2 
    bulletY = h 

elseif c.rotation > 90 and c.rotation <= 90 + math.deg(math.atan((w/2)/(h/2))) then 

    bulletX = w/2 - math.tan(((c.rotation * math.pi)/180) - ((90 * math.pi)/180)) * h/2 
    bulletY = h 

elseif c.rotation > 90 + math.deg(math.atan((w/2)/(h/2))) and c.rotation <= 180 then 
    bulletX = 0 
    bulletY = h/2 + math.tan(math.pi - ((c.rotation*math.pi)/180)) * w/2 

elseif c.rotation > 180 and c.rotation <= 180 + math.deg(math.atan ((h/2)/(w/2))) then 
    bulletX = 0 
    bulletY = h/2 - math.tan(((c.rotation * math.pi)/180) - math.pi) * w/2 

elseif c.rotation > 180 + math.deg(math.atan ((h/2)/(w/2))) and c.rotation <= 270 then 
    bulletX = w/2 - math.tan(((270 * math.pi)/180) - ((c.rotation * math.pi)/180)) * h/2 
    bulletY = 0 

elseif c.rotation > 270 and c.rotation <= 270 + math.deg(math.atan((w/2)/(h/2))) then 
    bulletX = w/2 + math.tan(((c.rotation * math.pi)/180) - ((270 * math.pi)/180)) * h/2 
    bulletY = 0 

elseif c.rotation > 270 + math.deg(math.atan((w/2)/(h/2))) and c.rotation <= 360 then 
    bulletX = w 
    bulletY = h/2 - math.tan(((360 * math.pi)/180) - ((c.rotation * math.pi)/180)) * w/2 
end 
1

老實說,我不知道現在如果有可能拉這一關沒有三角(和我有急事,所以我真的沒有想到一上來的時候),但即使我非常懷疑這會使這個過程變得更容易。

「罪」和「COS」是兩個功能似乎相當嚇人的初學者,尤其是在這樣的背景下,但坦率地說,他們是相當溫順。你可以做的最好的事情是上網搜索一些三角函數的解釋(一些大學教授發佈他們的講座文檔,並且通常對剛剛開始學習的初學者做出解釋),你會得到掛起它很快。因爲知道如何將這些知識應用於進一步的問題後來可以證明是非常有用的,找到一個不需要使用三角法的「解決方法」是不值得的。

0

您可以使用電暈物理模塊。它可能會更容易,如果您也需要它,甚至可以輕鬆實現碰撞檢測。 看一看這些鏈接:

隨着物理引擎,你只需要重力設置爲0,你的子彈添加到與addBody的物理引擎()然後對子彈施加衝動,使其沿着你想要的方向(你的目標)移動applyLinearImpulse()。

+0

非常棒! :) 謝謝! – Fannick