1

我有一个基本的 Space Invaders 类型的游戏,我无法识别玩家的射击何时击中外星人。(我只检查 Alien2 atm,左起一秒)。由于它们都在移动,我决定检查碰撞的唯一方法是使用基于范围的 if 语句(具有 2 个顶部坐标和一个左侧坐标),或者直接将沿 Y 轴的位置与 Jquery 进行比较。

我目前正在使用基于范围的解决方案,但到目前为止它还没有奏效(不知道为什么)。

到目前为止我的代码:

        if (key == "87"/*&& document.getElementById('BarrelOne').id=='BarrelOne'*/){
            var Invader2 = document.getElementById('Alien2');
            var Shot1 = document.getElementById('ShortShot');
            Shot1.style.webkitAnimationPlayState="running";
            setTimeout(function(){
                Shot1.style.webkitAnimationPlayState="paused";
            }, 1200);   

            if(document.elementFromPoint(625.5, 265.5) == Shot1){
                Invader2.style.visibility="hidden"; 
            }
        };

小提琴:

http://jsfiddle.net/ZJxgT/2/

4

2 回答 2

0

我建议不要浪费时间重新发明轮子,而是建议切换(如果仍然可能,取决于你的时间期限)到一个真正的 2D 游戏引擎,用于 Javascript易于碰撞检测

还要检查:Javascript 的 2D 引擎

于 2012-12-18T10:01:32.257 回答
0

我做了类似的事情,我发现使用gameQuery更容易实现。

测试碰撞:

var collided = $("#div1").collision("#div2");

你可以在这里看到完整的工作示例

编辑

如果您遇到问题,请查看 API。例如,要了解如何使用冲突,请查看API 的这一部分

collision作品如下:

此方法返回与所选元素冲突的元素列表,但仅返回与作为参数给出的过滤器匹配的元素列表。它需要两个可选参数(它们的顺序并不重要)。过滤器是用于检测碰撞的字符串过滤元素,它应该包含函数应该搜索碰撞的所有元素。例如,如果您寻找可能包含在组中的“foo”类元素的冲突,您将使用过滤器“.group,.foo”。

所以,写这样的东西:

$("#ShortShot").collision("#Alien2").hide();
// will return the alien if it collides with ShortShot

或者,隐藏它们:

if (($("#ShortShot").collision("#Alien2")).length) {
    $("#ShortShot").remove();
    $("#Alien2").remove();
}
于 2012-12-18T10:01:43.823 回答