【问题标题】:Built-in variables not usable in certain cases (Processing 3)内置变量在某些情况下不可用(处理 3)
【发布时间】:2017-07-11 04:29:13
【问题描述】:

过去几天我一直在用 Processing 3 构建一个程序(自 2009 年计算机科学简介以来第一次回到 Processing)并一直遇到这个问题:

public class PolarMap {
    ...
    PVector[][] mapping = new PVector[width][height];
    PVector[][] cartesian = new PVector[width][height];
    PVector cart = new PVector();
    PVector polar = new PVector();

    /**
    Maps every pixel on the cartesian plane to a polar coordinate        
    relative to some origin point.
    */
    public void Map(float originX, float originY){
        for (int x=0; x < width; x++){
            for (int y=0; y < height; y++){
            ...
            cart.add(x, y);
            polar.add(r, theta);
            mapping[x][y] = polar; ***
            cartesian[x][y] = cart; 
      }
    }
  }
  ...
}

在带有 *** 的行上,我总是会抛出一个 Array Index Out Of Bounds 。我搜索了 SO、Reddit 和 Processing 自己的文档以找出原因。如果您不熟悉处理,宽度和高度都是内置变量,并且等于画布上的像素数,并且在 setup() 方法中声明(在我的情况下为 800x800)。由于某种原因,两个数组都没有被初始化为这个值——相反,它们被初始化为这些变量的默认值:100。

所以,因为它没有任何意义,但这是其中之一,我尝试声明新变量:

int high = height;
int wide = width;

并用这些变量初始化数组。你不知道吗,这解决了问题。我现在有两个 800x800 数组。

所以这是我的问题:为什么内置变量在用于初始化数组时没有按预期工作,但在分配给定义的变量时却完全按照预期工作?

【问题讨论】:

    标签: variables processing built-in


    【解决方案1】:

    想想widthheight 变量何时获得它们的值。考虑这个示例草图:

    int value = width;
    
    void setup(){
       size(500, 200);
       println(value);
    }
    

    如果你运行这个程序,你会看到它打印100,即使窗口是500像素宽。这是因为int value = width; 行发生在宽度设置之前!

    为此,您必须在调用size() 函数之后设置value 变量。所以你可以这样做:

    int value;
    
    void setup(){
       size(500, 200);
       value = width;
       println(value);
    }
    

    在调用size() 函数之后,将所有初始化移动到setup() 函数内部,这样就可以了。

    【讨论】:

    • 有问题的数组初始化器和工作变量声明都在同一个范围内,远离主类中的 setup() 方法。但是....我刚刚想到我正在使用在主类中的 setup() 方法上方声明的值来提供 Map(originX, originY) 。根据您刚刚写的内容,我怀疑 this 是我的问题的根源。而且,刚刚测试过,你是绝对正确的!太棒了,谢谢!
    • @pyansharp 是的,它与范围没有任何直接关系,一切都按事件顺序排列。一种简单的测试方法是添加 print() 语句以查看哪个先发生,但基本上如果 widthheight100size() 尚未被调用。
    猜你喜欢
    • 2012-07-11
    • 2012-11-18
    • 1970-01-01
    • 2013-07-28
    • 1970-01-01
    • 1970-01-01
    • 2017-06-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多