【问题标题】:[cc creator]Comparison not working[cc creator]比较不起作用
【发布时间】:2016-03-19 12:39:51
【问题描述】:

我有一个节点“标志”数组,我想将对象的位置设置在该数组中的第一个对象上,它可以工作并且对象实际上按预期定位,但是当我进行比较时它失败并记录“不”。

设置位置的那行代码有效,但是比较失败,这是怎么回事?!

start: function () {
        this.node.position = this.flags[0].position;
        this.movement();
    },
    movement: function() {
       if (this.node.position == this.flags[0].position) {  // Problem
           console.log("YES");
       }
       else {
           console.log("No");

更新:

当我这样做时,它会起作用:

if (this.node.position.x == this.flags[0].position.x) // or position.y

【问题讨论】:

    标签: cocos2d-x cocos2d-js


    【解决方案1】:

    如果你在这里编写 javascript(看起来你是这样做的),你应该知道两件事:

    1. 您无法将对象与开箱即用的== 进行比较

      ({"a":1} == {"a":1}) 将返回 false(您可以在浏览器中自行尝试。 作为一种解决方法,您可以执行以下操作:

      函数 posCompare(p1, p2){ 返回 p1.x === p2.x && p1.y === p2.y; }

    然后用它来代替== 的位置

    1. 看看我如何使用=== 而不是==?第二件事是只使用===。您可以了解Which equals operator (== vs ===) should be used in JavaScript comparisons? 的区别,但我会在任何地方远离==。它速度较慢,可能会在这里和那里导致奇怪的错误 - 根本不要使用它

    【讨论】:

    • 等一下。您写了比较 position.x-es 的作品(这是不准确的,因为您需要检查两个坐标)是什么让您认为 'if (this.node.position.x === this.flags[0].position.x && this .node.position.y == this.flags[0].position.y)' 不起作用? (也许值实际上不同??)
    • 我说的是 === 而不是 ==,但是是的,你的方式可行,但我不明白为什么我的原始代码不起作用,继续比较 x && 很麻烦你喜欢这样。在其他游戏引擎中,位置比较可以正常工作。
    • 正如我所说,javascript 中没有内置的对象比较。如果您愿意,您可以为此导入一个 js 库,或者定义一个用于相等性检查的函数,但遗憾的是事情就是这样。
    猜你喜欢
    • 2013-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-07
    • 1970-01-01
    相关资源
    最近更新 更多