2012-11-30 73 views
0

一直試圖編寫一段時間的項目即時通訊仍然在爲學校工作,即使它已完成。多方向子彈[閱讀]

我想製作一個手榴彈,可以在與敵人相撞的敵人身上射出子彈,但是我需要atm幫助的是一次向所有不同方向發射8發子彈。

這裏是我的老師給我做的代碼(我向他求助)

if (mouse.LeftButton == ButtonState.Pressed) 
      { 
       Texture2D pewTexture; 
       pewTexture = game.Content.Load<Texture2D>("pew"); 
       game.firingSound.Play(); 
       //Tweak pews to shoot at mouse, rather than just going straight on the y axis. 
       pew = new CPew(game, pewTexture); 
       pew.velocity = new Vector2((float)Math.Cos(rotation), (float)Math.Sin(rotation)) * 10f + spriteVelocity; 
       pew.position = position + pew.velocity * 5; 

       //easy cheesy way: 
       //pew.position = position; 
       //pew.position.X += 15f; 
       //pew.position.Y -= 20f; 





       //super awesome cool way for cool people and celebrities 
       pew.position = position + 
        new Vector2(
         texture.Width * .2f - pew.texture.Width * .2f, 
         -pew.texture.Height); 

       game.pews.Add(pew); 

       myFiringDelay = 10; 


      } 
      else 
      { 
       if (mouse.RightButton == ButtonState.Pressed) 
       { 
        float pi2 = (float)Math.PI * 2.0f; 
        int numShots = 10; 
        float pi2overnum = pi2/numShots; 

        for (int i = 0; i < numShots; i++) 
        { 
         Vector2 direction = PiToVec2(pi2overnum * i); 

         //particles[i].reset(position,direction, vector2.zero, 6); 
         game.pews[i].Reset(pew.position, direction, Vector2.Zero); 

        } 

      Vector2 PiToVec2(float piT) 
      { 
       return new Vector2((float)Math.Sin(piT), (float)Math.Cos(piT)); 

      } 

顯然這將使其在鼠標各個方向射擊右鍵點擊,但每次我嘗試它,我的遊戲崩潰直上 然後,我們有一個pew類,這是子彈,多數民衆贊成在我想要在這些方向同時拍攝

你們可能無法幫助我向你展示的代碼,我我花了一段時間尋找一種方法來做到這一點,但我似乎無法找到任何東西

以前的示例和/或源代碼將非常有幫助,至少是另一種方式來看看這個謝謝。

Showingme時墜毀,它告訴我,指數超出範圍或爲負,如果你們可以只顯示我要多向子彈ID基礎代碼開心

+2

如果你的遊戲崩潰這將是非常有益的,以獲得相關的輸出/從調試器的錯誤讓我們能夠幫助你解決這個 –

+0

正好放嘗試捕捉到整個方法,看看有什麼錯誤正在拋出。也取決於錯誤,我們可能需要知道pews []是什麼。另外,每次點擊加載紋理都是一個糟糕的主意,您可能需要將其設置爲參考 – RoughPlace

+0

它會超出範圍?這意味着如果只有6個「pews」,你不能做pew [7]。所以從我看到的情況來看,當你點擊它循環10個pews時,什麼不是10? – Cyral

回答

0

問題您有是,當你嘗試循環訪問您正在嘗試對集合中前10個項目調用Reset()的game.pews集合。然而在那裏似乎沒有10個長椅。因此,當你到達最後並嘗試訪問下一個時,這就是你得到「索引超出範圍」錯誤的地方。

對於你的問題的手榴彈部分的8顆子彈,我想你想做這樣的事情。

//Once a grenade has collided with an enemy 
float pi2 = (float)Math.PI * 2.0f; 
int numShots = 8; 
float pi2overnum = pi2/numShots; 

for (int i = 0; i < numShots; i++) 
{ 
    Vector2 direction = PiToVec2(pi2overnum * i); 

    pew = new CPew(game, pewTexture); 

    pew.velocity = new Vector2((float)Math.Cos(rotation), (float)Math.Sin(rotation)) * 10f + spriteVelocity; 

    //Set the position based off of the grenades last position. 
    //Set the direction. 
    //Set any other attributes needed. 

    game.pews.Add(pew); 
} 

現在你有八顆子彈從手榴彈爆炸的不同方向移動。 要更新它們並繪製它們,我會推薦使用foreach循環,因此您不必擔心「索引超出範圍」錯誤。

foreach CPew pew in game.pews 
{ 
    pew.Update(); 
} 
+0

我改變了我在播放器類中的內容,我將foreach循環放入了我的game.cs中,因爲它不會在player.cs中工作,並且我一直在收集這些內容,Collection被修改;枚舉操作可能無法執行,是否有必要定期點擊鼠標左鍵單擊?如果有人可以,從頭開始的一個完整的手榴彈事例將是有益的,謝謝! – user1766351