javascript - 指示元素相互交叉
问题描述
我正在开发一个 JavaScript 简单游戏(游戏就像一个谷歌浏览器在没有网络的情况下显示)。
我想规定传入span
的是与第一个接触的span
。(与演员相交的麻烦)
目前的方法
let actor = $(el).find(".actor");
let mainOffset = toOffset($(actor).offset());
let incomingTrouble = $(".trouble")[0];
if(typeof incomingTrouble==="undefined")return;
let offset = toOffset($(incomingTrouble).offset());
if(offset.left<1){
$(incomingTrouble).removeClass("trouble");
}
if((offset.left>0 && offset.left===mainOffset.left) && offset.top<=mainOffset.top){
console.log("Dead");
$("button").trigger("click");
//Game over
}
上面的代码有一个问题,如果演员掉线并且问题尚未隐藏,则表明游戏已经结束,但实际上它们并没有相交。
暗示:
toOffset(...) return
两位小数 offset.left 和 offset.top
html
<div class="" tabindex="0" id="jump_game">
<section>
<!-- game actor -->
<span class="actor"><i class="zmdi zmdi-bike"></i></span>
<!-- game strangers -->
<span class="trouble stranger"><i class="zmdi zmdi-block"></i></span>
<span class="trouble stranger"><i class="zmdi zmdi-block"></i></span>
<span class="trouble stranger"><i class="zmdi zmdi-block"></i></span>
<span class="trouble stranger"><i class="zmdi zmdi-block"></i></span>
<span class="trouble stranger"><i class="zmdi zmdi-block"></i></span>
<span class="trouble stranger"><i class="zmdi zmdi-block"></i></span>
</section>
<button><i class="zmdi zmdi-play"></i></button>
</div>
解决方案
感谢我们的同事向我推荐 JavaScript:碰撞检测
这解决了我的问题。
function isCollide(a, b) {
var aRect = a.getBoundingClientRect();
var bRect = b.getBoundingClientRect();
return !(
((aRect.top + aRect.height) < (bRect.top)) ||
(aRect.top > (bRect.top + bRect.height)) ||
((aRect.left + aRect.width) < bRect.left) ||
(aRect.left > (bRect.left + bRect.width))
);
}
谢谢
推荐阅读
- javascript - FastApi 422 Unprocessable Entity,关于身份验证,如何解决?
- javascript - 如何在 HTML 和 CSS 中为垂直线赋予数字
- c++ - C++中的二叉搜索树插入方法
- emscripten - 传递任何 -msse、-msse2、-msse3、-mssse3、-msse4.1、-msse4.2、-mavx、-mfpu=neon 标志也需要传递 -msimd128
- angular - PrimeNG 芯片:removeIconClass 不起作用,并且不允许我替换默认 ICON,即 pi pi-times-circle
- algorithm - 在 dp 中解决的 0-1 背包是否有可能比用贪婪解决的分数背包更大?
- java - 从 C++ 创建 JVM 时从 JAVA 调用本机方法?
- reactjs - 在 InventorySettings 页面中启用和禁用设置
- c++ - 将(例如)12345:12-34 转换为三个整数: (12345, 12, 34) C++ 字符串?
- python - 如何检查端口是否正在从 Windows 机器上侦听 Linux 机器