2012-06-03 21 views
-1

我一直在試圖解決這個問題,但我真的不能看到代碼有什麼問題。它和我的其他矩形完全一樣,但不起作用。Rectangle ArgumentOutOfRangeException每個像素碰撞

工作守則:在這裏,一切工作正常(或多或少)

private void UpdateCollision() 
    { 
     // Uses built in rectangle intersect function to determine overlapping 
     Rectangle rectangle1; 
     Rectangle rectangle2; 
     Rectangle rectangle3; 

     // Creates 1 rectangle for player 
     rectangle1 = new Rectangle((int)player.Position.X, (int)player.Position.Y, player.Width, player.Height); 

     // Sets collision btw objs 
     for (int i = 0; i < enemies.Count; i++) 
     { 
      for (int j = 0; j < enemies2.Count; j++) 
      { 
       rectangle2 = new Rectangle((int)enemies[i].Position.X, (int)enemies[i].Position.Y, enemies[i].Width, enemies[i].Height); 
       rectangle3 = new Rectangle((int)enemies2[j].Position.X, (int)enemies2[j].Position.Y, enemies2[j].Width, enemies2[j].Height); 

       // Determines collision 
       if (IntersectPixels(rectangle1, playerTextureData, rectangle2, enemyTextureData) && player.PlayerAnimation.Active == true) 
       { 
        player.Health -= enemies[i].Damage; 
        enemies[i].Health = 0; 

        if (player.Health == 0) 
         AddMyExplosion(player.Position); 
       } 

       if (IntersectPixels(rectangle1, playerTextureData, rectangle3, enemy2TextureData) && player.PlayerAnimation.Active == true) 
       { 
        player.Health -= enemies2[j].Damage; 
        enemies2[j].Health = 0; 

        if (player.Health == 0) 
         AddMyExplosion(player.Position); 
       } 
      } 
     } 

非工作守則:在異常彈出的線就是rectangle3定義

// Proj obj collision 
     for (int i = 0; i < projectiles.Count; i++) 
     { 

      for (int j = 0; j < enemies.Count; j++) 
      { 
       for (int k = 0; k < enemies2.Count; k++) 
       { 

        // Creates col det rectangles 
        rectangle1 = new Rectangle((int)projectiles[i].Position.X - projectiles[i].Width/2, (int)projectiles[i].Position.Y - projectiles[i].Height/2, projectiles[i].Width, projectiles[i].Height); 
        rectangle2 = new Rectangle((int)enemies[j].Position.X - enemies[j].Width/2, (int)enemies[j].Position.Y - enemies[j].Height/2, enemies[j].Width, enemies[j].Height); 
        rectangle3 = new Rectangle((int)enemies2[k].Position.X - enemies2[k].Width/2, (int)enemies[k].Position.Y - enemies2[k].Height/2, enemies2[k].Width, enemies2[k].Height); 
        //Rectangle 3 is not working// 

        // Determines col 
        if (IntersectPixels(rectangle1, projectileTextureData, rectangle2, enemyTextureData)) 
        { 
         enemies[j].Health -= projectiles[i].Damage; 
         AddImpact(projectiles[i].Position); 
         impactSound.Play(); 
         projectiles[i].Active = false; 
        } 

        if (IntersectPixels(rectangle1, projectileTextureData, rectangle3, enemy2TextureData)) 
        { 
         enemies2[j].Health -= projectiles[i].Damage; 
         AddImpact(projectiles[i].Position); 
         impactSound.Play(); 
         projectiles[i].Active = false; 
        } 
       } 
      } 
     } 
    } 

所以,如果任何人都可以幫助我解決這個問題,我將非常感激。

+3

請告訴我們什麼是不工作的。另外,請縮短代碼。 – usr

+1

在這個失敗的行中不應該(int)敵人[k] .Position.Y be(int)enemies2 [k] .Position.Y? – rene

回答

2

Typo。改變這一行:

rectangle3 = new Rectangle((int)enemies2[k].Position.X - enemies2[k].Width/2, (int)enemies[k].Position.Y - enemies2[k].Height/2, enemies2[k].Width, enemies2[k].Height); 

這樣:

rectangle3 = new Rectangle((int)enemies2[k].Position.X - enemies2[k].Width/2, (int)enemies2[k].Position.Y - enemies2[k].Height/2, enemies2[k].Width, enemies2[k].Height); 
+0

花時間閱讀並驗證所有代碼使你成爲英雄。 – usr

+2

我其實一直都很擅長髮現這樣的小副本/粘貼錯誤 - 我認爲這與第一次世界大戰中他們如何在觀察平面上發送色盲人類相似,因爲他們很容易發現彩色僞裝。 – MusiGenesis

+0

wowowowowowowowowowowow如何helll .... lmfao omg謝謝。我現在感到很蠢。 – daddy7860