2011-07-03 89 views
0

這是我第一次探索使用JavaScript構建遊戲的jQuery和gameQuery,所以我問了一些可能看起來很幼稚的東西,但我真的無法得到它。gameQuery碰撞檢測

我正在開發一個像太空侵略者這樣的遊戲,探測玩家導彈和敵人之間的碰撞不工作。

這是我的代碼:

我的敵人類

function Enemy(node){ 
    this.node = $(node); 
    this.pts_value = 0; 
    return true; 
} 

這是我使用到下添加10個或敵精靈彼此代碼的定義。敵人一起移動到左邊,

$.each(new Array(10), function(index, value) { 
    $("#enemy_group").addSprite("enemy2_"+index,{animation: enemies[2], 
     posx: index * 55, posy: 0, width: 48, height: 48}) 
    $("#enemy2_"+index).addClass("enemy"); 
    $("#enemy2_"+index)[0].enemy = new Enemy($("#enemy2_"+index)); 
    $("#enemy2_"+index)[0].pts_value = 150; 
}); 

所以當我需要移動的敵人,我的敵人一起移動的權利,我動議包括所有的精靈「#enemy_group」

if(ENEMY_TO_RIGHT){ 
     var enemiesNewPos = (parseInt($("#enemy_group").css("left"))) + ENEMY_SPEED; 
     if(enemiesNewPos < PLAYGROUND_WIDTH - 550){ 
      $("#enemy_group").css("left", ""+enemiesNewPos+"px"); 
     } else { 
      ENEMY_TO_RIGHT = false; 
     } 
    } else { 
     var enemiesNewPos = (parseInt($("#enemy_group").css("left"))) - ENEMY_SPEED; 
     if(enemiesNewPos > 0){ 
      $("#enemy_group").css("left", ""+enemiesNewPos+"px"); 
     } else { 
      ENEMY_TO_RIGHT = true; 
     } 
    } 

終於碰撞檢測,我想刪除敵方精靈的玩家導彈擊中,每枚導彈精靈有一個附加的類名「.playerMissiles」

$(".playerMissiles").each(function(){ 
     var posy = parseInt($(this).css("top")); 

     if(posy < 0){ 
      $(this).remove(); 
      return; 
     } 

     $(this).css("top", ""+(posy - MISSILE_SPEED)+"px"); 
     //Test for collisions 
     var collided = $(this).collision(".enemy, .group"); 
     if(collided.length > 0){ 
      //An enemy has been hit! 
      collided.each(function(){ 
       $(this).setAnimation(enemies[0], function(node){$(node).remove();}); 
      }) 

     } 
    }); 

我是弗洛請閱讀gameQuery網站上的文檔教程。

讚賞任何幫助,謝謝,

回答

1

你可以使用jquery collision插件,讓你避免doid邏輯自己。

希望這會有所幫助。歡呼聲

+0

感謝您的幫助,但問題以其他方式解決 –

2

我看不出您的代碼有任何問題。我只能給你幾個指針:

  • 你用addGroup函數創建了「enemy_group」嗎?
  • 「enemy_group」嵌套在一個特殊的東西像一個自定義的div?爲了讓碰撞檢測起作用,你需要一個只包含精靈和羣組的母鏈(和貼圖)
  • 「enemy_group」嵌套在精靈中,如果是這樣的話,這是一個壞主意,因爲你需要添加選擇器這個精靈在你的方法調用中,這個精靈將被包含在碰撞元素列表中。
  • 將同樣適用於「.playerMissiles」

只是要確保你使用的是什麼版本gameQuery和jQuery的? gitHub的最後一個版本不穩定,我不推薦使用它,而是用戶0.5.1。

+0

確實,是的代碼是正確的,這是版本的問題。 我使用的是gameQuery rev 0.5.4和jQuery 1.4.2,它們並不兼容,我需要用更新的版本(如1.4.4)替換jQuery,它的工作非常好 –