Processing3 PShape.setTexture 数组索引越界错误

Processing3 PShape.setTexture array index out of bounds error

以下代码产生数组越界异常(ArrayIndexOutOfBoundsException:-2)

不知道为什么,一直在网上看教程。已通读参考资料和 Processing Javadoc,但关于该方法的信息不多。有人有什么想法吗?

someImage.jpg 是一个 1200 X 600 的图像文件

class Ball
{
    float size;

    Ball(float size)
    {
        this.size = size;
    }

    void show(PImage img)
    {
        PShape my_ball;
        my_ball = createShape(SPHERE, size);
        shape(my_ball);
        my_ball.setTexture(img);
    }
}//end class


PImage img;
Ball a = new Ball(25);

void setup()
{
    size(600, 600, P3D);
    img = loadImage("someImage.jpg");
}

void draw()
{
    a.show(img);
}

在 setup() 中调用 size() 之后,仅实例化一次形状可能会有所帮助。然后绘制循环可以简单地显示形状和纹理。请注意 here 在 setup() 期间如何在 size() 之后调用 createShape。

下面是重构后的代码(在 Win10 的 P3.2.1 中工作正常)您可以在您的系统上尝试:

class Ball {
  float size;
  PShape my_ball;

  Ball(float size) {
    this.size = size;
    my_ball = createShape(SPHERE, size);
    my_ball.setStroke(false);
  }

  void show(PImage img) {
    my_ball.setTexture(img);
    shape(my_ball);
  }
}//end class

PImage img;
Ball a;

void setup() {
  size(600, 600, P3D);
  img = loadImage("someImage.jpg");
  a = new Ball(600.0);
}

void draw() {
  translate(300,300,-1200);
  a.show(img);
}

更新:在上面的代码中修复了两行:在调用 shape() 之前 设置了纹理,并且应该在 my_ball 上调用 .setStroke() 方法] 对象使笔画静音。注意:如果 setTexture() 在 shape() 之后被调用,我会得到同样的越界异常。