Js if语句不能正常工作

时间:2017-06-22 11:13:06

标签: javascript object for-loop if-statement

所以我正在使用p5js框架制作这个突破性的游戏,但是在检查球是否击中了块时我有点卡住了。我把我的所有块作为一个数组中的对象,然后我每帧循环遍历数组以检查它是否与球发生碰撞,但不知何故我的if语句不能正常工作。

这就是我的循环:

for(var i=0; i<blocks.length; i++){
        if(this.x <= (blocks[i].x + 10) && this.x >= (blocks[i].x - 10)){
         //the + and - 10 stand for the length of the block which is 20 and is drawn from the center
            console.log(blocks[i], this.x, this.y);
            if(this.y <= blocks[i].y + 10 && this.y >= blocks[i].y + 5){
            //here the + 10 stands for the height of the block/2 + the height of the ball/2 and the + 5 stands for the height of the height of the block/2
                console.log('yes');
            }
        }
    }

你可以看到我console.log()当前块和球x和y位置,如果它的x位置符合要求但是如果我记录它我得到这个结果:

block {x: "70", y: "315", c: "white"} 200 470
//I get a lot more results but this is an example.

但这不应该记录,因为70 + 10&lt; 200。 我的第二个console.log()也永远不会触发。

这是我的球对象的变量:

this.x = x;
this.y = y;
this.r = 10;

以r为球的半径。

这就是块对象的样子:

this.x = x;
this.y = y;

我希望有人可以提供帮助。

2 个答案:

答案 0 :(得分:2)

我认为问题是你的block.x是一个字符串,而不是一个数字。您可以在浏览器的控制台中验证这一点:

&#13;
&#13;
console.log(200 < "70" + 10) // true
console.log(200 > "70" - 10) // true
&#13;
&#13;
&#13;

这是因为"70" + 10会产生"7010",但"70" - 10会产生60(在这些情况下,JS决定如何将字符串转换为数字非常有趣,对?)。您需要使用block.x方法将block.yparseInt()转换为数字。 E.g。

&#13;
&#13;
console.log(200 < parseInt("70") + 10) // false
&#13;
&#13;
&#13;

答案 1 :(得分:1)

  block {x: "70", y: "315", c: "white"} 200 470

var x:“70”typeof String与你的var y相同 您可以尝试parseFloat(x)/parseInt(x)将更改为数字。