2014-03-27 78 views
0

有一些小問題有一些想法,但不知道要使用哪些庫以及如何使用。 到目前爲止,我正在創建2D遊戲,並且我有一個小船精靈和子彈。 就在這一刻,我的子彈從船的中心點發射。LibGDX設置子彈船周圍的初始位置2D圖形

我想要什麼:

  • 要創造這樣在我的船了一圈,並根據方向使可能從圓線 火子彈。也許 它可以通過使用Quaternion類,但需要一些 提示,如何開始。
  • 另一種想法是創建另一個子彈,其中 將總是平行於第一個並且將同時被觸發 。

下圖描述了我在這個項目中的目標。 enter image description here

到目前爲止,我的更新()播放器類中的方法使下面的操作:

@Override 
public void update() { 
//When player touches the screen, TouchInputHandler class sets the variable isAiming = true. 
    if (TouchInputHandler.isAiming) { 
//Creating an Vector2 object which takes coordinates from user input on the screen. 
     Vector2 aim = new Vector2(TouchInputHandler.getAimDirection().x, TouchInputHandler.getAimDirection().y); 

//Checking if aim is real value. 
//Waiting for the delay between previous and next bullet launched. 
     if (aim.len2() > 0 && cooldownRemaining <= 0) { 

//cooldownFrames if final static value equal to 6. 
//So loop will go through 6 times before next bullet. 
      cooldownRemaining = cooldownFrames; 
//Taking the current position of the ship and applying it to the current position of bullet. 
      Vector2 currentPos = new Vector2(position.x, position.y); 
//Substituting current bullet position from the aim position and getting direction vector. 
      aim.sub(currentPos); 
//Normalizing the aim (bullet direction) vector, so the sum of scalars of vector = 1; 
     aim.nor(); 

      //Incresing the speed of bullet movement. 
      aim.x *= 10; 
      aim.y *= 10; 

      //adding new entity with the bullet currentPos and direction where it has to move. 
      EntityManager.addEntity(new Bullet(currentPos, aim)); 

//After bullet has been launched, set isAiming to false. 
        TouchInputHandler.isAiming = false; 
       } 
    } 

//decreasing cooldown Remaining in every loop until it will be equal 0 and bullet'll be ready again. 
    if (cooldownRemaining > 0) 
     cooldownRemaining--; 
//method that is responsible for player movement. 
    motionMove(); 

} 

如果你需要的代碼的任何其他部分,或其他信息,只問。 我將非常感謝您的幫助或任何提示。謝謝!

+0

所以你想,子彈是從圓圈開始的,不是中心點? 你不需要四元數,因爲你在二維空間。四元數是一個方向矢量,旋轉應用於它(繞着這個矢量滾動)。我認爲2D Vecotr會在你的情況下做到這一點,但告訴我你想達到什麼目的,以及我的假設是否正確。 – Springrbua

+0

哦,謝謝你的迴應。是的,你的假設是對的。我想要從圓圈邊界發射子彈,但不是從船的中心點發射子彈。任何想法,如何實現這個圈子?因爲現在子彈從船裏出來,看起來很醜。或者有任何其他的方式來實現這個功能?謝謝! – user3434362

+0

你必須使用一個Vector2方向,它是一個歸一化的矢量,給出x的運動百分比和y方向的運動百分比。你必須計算兩個方向的運動。 – Springrbua

回答

2

您應該使用direction載體來獲得起始位置。 要做到這一點,你只需要縮放矢量direction與圓的radius這個載體添加到圈子中心:

bulletStart.set(position).add(direction.scl(radius)); 

position是你的船的中心。 direction是歸一化方向向量。 radius是圓的半徑。

請注意,Vector2的方法更改Vector並返回鏈接。因此在撥打direction.scl(radius)後,direction不再標準化。

另一個注意:這不是真的準確(盡我所知),因爲Vector的長度是vector.x + vector.y而不是sqrt(vector.x² + vector.y²),這將是半徑。但是在你的情況下,這種差異不應該太大,即使它不應該那麼難,我現在也無法考慮正確的公式。如果有人知道它,請告訴我:P