【问题标题】:Seeing if two rectangles have hit in HTML5 canvas查看 HTML5 画布中是否有两个矩形
【发布时间】:2012-07-28 15:08:32
【问题描述】:

我正在用 HTML5 制作我的第一个游戏,我需要弄清楚如何判断两个矩形是否相互碰撞。到目前为止,我真的不确定如何。这是我尝试过的代码,但它仅在敌人击中 this 的绘制点时才有效。到此为止:

if(this.drawX >= enemies[i].drawX && this.drawX <= enemies[i].drawX + enemies[i].width && this.drawY >= enemies[i].drawY && this.drawY <= enemies[i].drawY + enemies[i].height) {

我对如何正确执行此操作感到困惑。谁能帮帮我?

编辑:我试过这段代码:

if (!(this.drawX + this.width < enemies[i].drawX ||
        enemies[i].drawX + enemies[i].width < this.drawX ||
        this.drawY + this.height < enemies[i].drawY ||
        enemies[i].drawY + enemies[i].height < this.drawY)) {
                   gameOver();
           } 

代码似乎使游戏几乎随机结束。怎么解决,也不好意思等了这么久。

【问题讨论】:

标签: javascript html


【解决方案1】:

如果矩形相交,则一个矩形的角必须在另一个矩形内(假设它们没有旋转)。编写一个函数,该函数接受一个矩形和一个点,如果该点在矩形内,则返回 true。然后调用该函数 8 次(每个角一次)并将结果与​​|| 结合起来。

【讨论】:

    【解决方案2】:

    你需要写一个这样的函数

    function (rectA, rectB) {
      return !(rectA.x + rectA.width < rectB.x ||
               rectB.x + rectB.width < rectA.x ||
               rectA.y + rectA.height < rectB.y ||
               rectB.y + rectB.height < rectA.y);
    }; 
    

    【讨论】:

    • 是的,这应该可以。它基本上检查矩形不相交的所有可能性。如果所有不相交的属性都为假,则函数返回真。使用它,看看它的作用。您可能还想在纸上绘制图表并手动测试这些条件
    • 一定是你使用“this”的方式有问题。没有看到完整的功能就不能说什么
    • 那么您是说如果我调用正确的变量,该函数应该可以工作吗?
    猜你喜欢
    • 2015-10-22
    • 2011-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-13
    相关资源
    最近更新 更多