Javascript gameQuery碰撞检测

Javascript gameQuery碰撞检测,javascript,collision-detection,gamequery,Javascript,Collision Detection,Gamequery,这是我第一次探索使用JavaScript构建游戏的jQuery和gameQuery,所以我想问一些看起来很幼稚的问题,但我真的搞不懂 我正在开发一款类似《太空入侵者》的游戏,用于检测玩家导弹和敌人之间的碰撞 这是我的代码: 我的敌人阶级的定义 function Enemy(node){ this.node = $(node); this.pts_value = 0; return true; } 这是我用来把十个敌人的精灵加在一起的代码。敌人一起向左和向右移动 $.ea

这是我第一次探索使用JavaScript构建游戏的jQuery和gameQuery,所以我想问一些看起来很幼稚的问题,但我真的搞不懂

我正在开发一款类似《太空入侵者》的游戏,用于检测玩家导弹和敌人之间的碰撞

这是我的代码:

我的敌人阶级的定义

function Enemy(node){
    this.node = $(node);
    this.pts_value = 0;
    return true;
}
这是我用来把十个敌人的精灵加在一起的代码。敌人一起向左和向右移动

$.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;
});
因此,当我需要移动敌人时,我会将敌人移动到一起,移动包含所有精灵的组“#敌人组”

if(敌人从右到右){
var enemiesNewPos=(parseInt($(“#敌方_组”).css(“左”))+敌方速度;
如果(enemiesNewPos<操场宽度-550){
$(“#敌#集团”).css(“左”,“敌#集团”+“px”);
}否则{
敌人对右=假;
}
}否则{
var enemiesNewPos=(parseInt($(“#敌方小组”).css(“左”))-敌方速度;
如果(enemiesNewPos>0){
$(“#敌#集团”).css(“左”,“敌#集团”+“px”);
}否则{
敌人对右翼=正确;
}
}
最后,为了碰撞检测,我想移除玩家导弹击中的敌人精灵,每个导弹精灵都有一个附加的类名“.playerMissiles”

$(“.playerMissiles”).each(函数(){
var posy=parseInt($(this.css(“top”));
if(posy<0){
$(this.remove();
返回;
}
$(this.css(“top”,”+(posy-导弹速度)+“px”);
//碰撞试验
var collide=$(this.collion(“.敌方,.group”);
如果(碰撞。长度>0){
//敌人被击中了!
冲突。每个(函数(){
$(this.setAnimation(敌人[0],函数(节点){$(节点).remove();});
})
}
});
我一直在关注gameQuery网站上的文档教程

非常感谢您的帮助,

您可以使用插件,这样您就不用自己做逻辑了

希望这有帮助。干杯

你可以使用插件,这样你就不用自己去做逻辑了


希望这有帮助。干杯

我看不出您的代码有任何问题。我只能给你几点建议:

  • 您是否使用addGroup功能创建了“敌方小组”
  • “敌方小组”是否嵌套在自定义div之类的特殊元素中?为了使碰撞检测工作,您需要一个仅由精灵和组(以及贴图平铺)组成的父对象链
  • “敌方小组”是否嵌套在精灵中,如果是这样,这是一个坏主意,因为您需要在methode调用中为该精灵添加选择器,并且该精灵将包含在冲突元素列表中
  • “.playerMissiles”也是如此

只是为了确定您使用的是什么版本的gameQuery和jQuery?gitHub的最后一个版本不稳定,我不建议使用它,而是使用用户0.5.1。

我看不出您的代码有任何问题。我只能给你几点建议:

  • 您是否使用addGroup功能创建了“敌方小组”
  • “敌方小组”是否嵌套在自定义div之类的特殊元素中?为了使碰撞检测工作,您需要一个仅由精灵和组(以及贴图平铺)组成的父对象链
  • “敌方小组”是否嵌套在精灵中,如果是这样,这是一个坏主意,因为您需要在methode调用中为该精灵添加选择器,并且该精灵将包含在冲突元素列表中
  • “.playerMissiles”也是如此

只是为了确定您使用的是什么版本的gameQuery和jQuery?gitHub的最后一个版本不稳定,我不建议使用它,而是用户0.5.1。

的确,代码是正确的,这是版本问题。我使用的是gameQuery rev 0.5.4和jQuery 1.4.2,这两个版本不兼容。我需要用更新的版本(如1.4.4)替换jQuery,它运行得非常好。的确,是的,代码是正确的,这是版本问题。我使用的是gameQuery rev 0.5.4和jQuery 1.4.2,这两个版本不兼容,我需要用更新的版本(如1.4.4)替换jQuery,它运行得非常好
    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").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();});
            })

        }
    });