2014-12-29 96 views
0

我正在創建一個遊戲,敵人在上下左右四個方向上移動。目前當敵人與我的比賽中的岩石相撞時,他們就會卡在那裏。敵人根據他們的「移動」int變量移動; 1向右移動,2向左移動,3向下移動,4向上移動。因此,根據他們在碰撞時的移動變量,他們應該朝相反的方向移動,直到他們不再碰撞。碰撞不能正常工作

敵人移動代碼

public void enemyMove() 
{ 
    movetime--; 

    if (move == 1) 
    { 
     position.X += speed; 
     if (position.X > 1320) 
     { 
      move = rand.Next(1, 5); 
      position.X -= 5; 
      enemyMove(); 
     } 
    } 

    if (move == 2) 
    { 
     position.X -= speed; 
     if (position.X < 160) 
     { 
      move = rand.Next(1, 5); 
      position.X += 5; 
      enemyMove(); 
     } 
    } 

    if (move == 3) 
    { 
     position.Y += 5; 
     if (position.Y > 780) 
     { 
      move = rand.Next(1, 5); 
      position.Y -= 5; 
      enemyMove(); 
     } 
    } 

    if (move == 4) 
    { 
     position.Y -= 5; 
     if (position.Y < 120) 
     { 
      move = rand.Next(1, 5); 
      position.Y += 5; 
      enemyMove(); 
     } 
    } 
} 

岩石碰撞代碼(e是敵類,它是其中enemyMove代碼)

if (e.boundingBox.Intersects(r.boundingBox)) 
{ 
    switch (e.move) 
    { 
     case 1: 
     { 
      e.position.X -= e.speed; 
      //e.move = 2; 
      break; 
     } 
     case 2: 
     { 
      e.position.X += e.speed; 
      //e.move = 1; 
      break; 
     } 
     case 3: 
     { 
      e.position.Y -= e.speed; 
      //e.move = 4; 
      break; 
     } 
     case 4: 
     { 
      e.position.Y += e.speed; 
      //e.move = 3; 
      break; 
     } 
    } 
} 

我評論的是,當它的碰撞它的線改變它的移動變量,因爲它到目前爲止應該沒問題,但敵人一直在卡住。當我沒有注意到這些線條時,敵人會在6秒內「嘶嘶」出來之後得到釋放(不會想到用更好的方式來描述它)。

如果有任何需要,以幫助看到更多的代碼,請向我一定要得到它,你

+0

我編輯了你的標題。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 –

回答

0

添加時enemy發生了衝突,並試圖糾正一個布爾標誌 - 因爲這代碼站,if(e.boundingBox.Intersects(r.boundingBox))檢查每一幀,並因此將導致一系列無限的轉身。

同時關注光線投射和先驗碰撞檢測,因爲這可以幫助解決空洞問題,並且可以防止處理碰撞和修正所需的幾幀鏡架中途嵌入牆壁中的敵人的視覺實例。