首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gameQuery碰撞检测

gameQuery碰撞检测
EN

Stack Overflow用户
提问于 2011-07-04 06:57:01
回答 2查看 894关注 0票数 0

这对我来说是第一次使用JavaScript开发游戏的jQuery和gameQuery,所以我问一些看起来很幼稚的事情,但我真的搞不懂。

我正在开发一个类似太空入侵者的游戏,检测玩家导弹和敌人之间的碰撞不起作用。

这是我的代码:

我的Enemy类的定义

代码语言:javascript
复制
function Enemy(node){
    this.node = $(node);
    this.pts_value = 0;
    return true;
}

这是我用来把十个敌人的精灵放在一起的代码。敌人一起向左向右移动

代码语言:javascript
复制
$.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“的组。

代码语言:javascript
复制
    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“。

代码语言:javascript
复制
    $(".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网站上的文档教程。

感谢你的帮助,谢谢,

EN

回答 2

Stack Overflow用户

发布于 2011-07-05 15:08:26

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

  • 你是不是用addGroup函数创建了"enemy_group“?
  • 是"enemy_group”嵌套在某个特殊的东西中,比如自定义div?要使碰撞检测起作用,您需要一个仅由".playerMissiles"

和组(以及磁贴图)组成的父级链,如果是这样,

  • 将"enemy_group“嵌套在sprite中,这不是一个好主意,因为您将需要在方法调用中添加此子画面的选择器,并且此子画面将包含在碰撞元素列表中。

  • 对于sprite也是如此

只是为了确保您使用的是什么版本的gameQuery和jQuery?来自gitHub的最新版本不稳定,我不推荐使用它,用户为0.5.1。

票数 2
EN

Stack Overflow用户

发布于 2011-07-04 07:23:20

你可以使用jquery collision插件,这样你就可以避免自己重复逻辑。

希望这能有所帮助。干杯

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6566054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档