Javascript 旧浏览器中DOMRect的替代方案

Javascript 旧浏览器中DOMRect的替代方案,javascript,rect,Javascript,Rect,我在教一个叫JS的家伙,我们正在编写一个游戏。为了检测碰撞,我们使用DOMRect对象。两个对象中的每一个都为我们提供了如下矩形: get_rect(){ return new DOMRect (this.x, this.y, this.width, this.height); } if(rects_intersect(player.get_rect(), enemy.get_rect()) == true){ alert('collision') } 在主文件中,我们有一个

我在教一个叫JS的家伙,我们正在编写一个游戏。为了检测碰撞,我们使用DOMRect对象。两个对象中的每一个都为我们提供了如下矩形:

get_rect(){
    return new DOMRect (this.x, this.y, this.width, this.height);
}
if(rects_intersect(player.get_rect(), enemy.get_rect()) == true){
    alert('collision')
}
在主文件中,我们有一个检查冲突的函数:

function rects_intersect(rect_a, rect_b) {
    return (rect_a.left <= rect_b.right && 
        rect_b.left <= rect_a.right &&
        rect_a.top <= rect_b.bottom &&
        rect_b.top <= rect_a.bottom);
}
在我的机器上,代码运行良好。在我学生的机器上它不工作。浏览器在以下行显示:“DOMRect未定义”:

return new DOMRect(this.x, this.y, this.img.width, this.img.height);
我的学生有一台很旧的电脑,上面有WinXP。他的铬含量是49.0.2623.112。他说他不能再更新XP了

你能建议:

  • 在早期浏览器中工作的DOMRect的替代方案
  • 或者完全替代DOMRect,同时保留应用程序的逻辑

  • 您可以向代码中添加polyfill,只有在尚未定义
    DOMRect
    的情况下才会生效:

    var DOMRect = DOMRect || function (x, y, width, height) { 
        this.x = this.left = x;
        this.y = this.top = y;
        this.width = width;
        this.height = height;
        this.bottom = y + height;
        this.right = x + width;
    };
    

    当然,您不应该有修改任何属性的代码。如果是这种情况,您应该为这些属性创建getter和setter,以便其他属性保持同步。

    那么..如何?如果我理解正确,getBoundingClientRect只能返回标准HTML对象的位置和大小,在我们的游戏中,我们从scratchCorrect创建对象,因此如果您已经有了它,那么从左+宽和顶+高计算底部或右侧实际上什么都不是,除非我遗漏了一些东西。目标是使函数rects_intersect()通用。它应该使用两个矩形作为参数,并返回true/false。如果这个函数依赖于它应该检查冲突的对象的实际实现,那么它将不再是通用的,我们将不能简单地将它从一个项目复制到另一个项目。如果你能在它的上下文中展示你的代码,可能是一个类,这将很有帮助。你现在能演示如何实例化这个类吗?以前我使用过:newdomrect(…,…,…,…);它应该是透明的。您不需要触摸任何现有代码。