OOP没有用if语句和>产生预期的结果。迹象

时间:2011-11-08 06:47:00

标签: actionscript-3 oop

以下是我的代码: 此代码用于在提供给定节点时查找周围节点。

enter image description here

for(var i:uint = 0;i < nodes.length; i++){
            test_node = this.nodes[i];
            if (test_node.row < node.row - 1 || test_node.row > node.row + 1) continue;
            if (test_node.column < node.column - 1 || test_node.column > node.column + 1) continue;
            surrounding_nodes.push(test_node)

        }
/*
nodes contains an array of objects.
node is an object I want to use as my test variable. 
property row contains the row in which the object is located
proerty column contains the cloumn in which the object is located
*/  

我得到了正确的结果(因为我正在遵循教程),虽然我不确定为什么?

这就是我的想法。

  1. 如果test_node行低于节点行位置,或者是test_node row位于节点行上方 - 继续

  2. 如果test_node列位于节点列位置左侧,或者test_node列位于右侧 节点列 - 继续。

  3. 假设上面的图像案例 因此,around_nodes不应包含节点中的所有对象(bar实际节点),因为每个对象都将满足上述语句,因为对象要么位于节点的上方或下方,要么位于节点的左侧或右侧。

    这段代码实际上只是找到节点周围的节点(红色方块)。

    有人可以帮我理解这些if语句。

    感谢

1 个答案:

答案 0 :(得分:2)

只需用数字替换条件,你就会看到它是如何工作的。

在上图中,节点位于第4行和第4列(从0开始),让我们在第2行采用test_node 那么

if (test_node.row < node.row - 1 || test_node.row > node.row + 1)

转换为

if (2 < 3 || 2 > 5 ) continue

continue表示“跳过此迭代的其余部分并启动下一个迭代”

所以现在在第3行和第3列采用test_node

if ( 3 < 3 || 3 > 5 ) continue
if ( 3 < 3 || 3 > 5 ) continue

所有4个条件都是false,因此它将它添加到surrounding_nodes

- 编辑 -

顺便说一句,如果你标记你的循环,那么发生的事情会更加清晰

iterateNodes : for(var i:uint = 0;i < nodes.length; i++){
    test_node = this.nodes[i];
    if (test_node.row < node.row - 1 || test_node.row > node.row + 1) continue iterateNodes;
    if (test_node.column < node.column - 1 || test_node.column > node.column + 1) continue iterateNodes;
    surrounding_nodes.push(test_node);
}