2012-12-15 74 views
1

我已经有了一个基本的太空侵略者类型的游戏,并且我无法识别何时玩家的击球击中了外星人。 (我只检查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"; 
      } 
     }; 

的jsfiddle:

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

+1

您没有使用的jsfiddle正确.... – bobthyasian

+0

'的document.getElementById( 'Alien2')。style.top <=“265.5px”'不是一个很好的比较。使用jQuery并获取该元素的'offset()。top'作为数字。 – Blender

+0

检测_“冲突”_ IMO的最简单方法是:'Math.abs()',节点的偏移量(jQuery或no)以及 - 也许是最被低估的DOM API方法文档的组合。 getElementFromPoint':[检查MDN在这里](https://developer.mozilla.org/en-US/docs/DOM/document.elementFromPoint),看看它是如何工作的 –

回答

0

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

来测试碰撞:

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

你可以看到完整的工作示例here

如果您无法check out the API编辑

。例如,要了解如何使用碰撞检查this part of the API

collision作品以下列方式:

此方法返回与所选择的一个,但只有那些与给定的参数滤波器匹配collisioning元素的列表。它有两个可选参数(它们的顺序并不重要)。过滤器是一个用于检测碰撞的字符串过滤元素,它应该包含函数应该搜索碰撞到的所有元素。例如,如果您查找可能包含在组中的类“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(); 
} 
+0

这......非常简单。感谢:D –

+0

我对使用代码库进行编程颇为陌生,并且gameQuery网站(讽刺)并不是非常有帮助 - 你能解释一下这是如何在游戏中起作用的吗?我可以理解代码,但我不知道如何将它附加到某个函数,或者是否需要运行StartGame函数。 –

+0

这非常直截了当,请查看[gameQuery演示页面](http://gamequeryjs.com/demo/)并尽量找到尽可能接近您自己游戏的演示。比如,只需下载游戏代码并使用它即可。这是我用jQuery做的第一件事,我发现它很容易。如果您有任何具体问题,请随时提问。 – Kuf