2011-07-03 88 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,它的工作非常好 –