Processing3 PShape.setTexture数组索引超出范围错误

时间:2016-10-27 01:24:49

标签: 3d processing

以下代码生成一个数组超出范围的异常(ArrayIndexOutOfBoundsException:-2)

我不知道为什么,我一直在网上关注教程。已经阅读了引用和处理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);
}

1 个答案:

答案 0 :(得分:1)

在setup()中调用size()之后,只有一次实例化形状可能会有所帮助。然后,绘制循环可以简单地显示形状和纹理。注意here在size()之后的setup()期间如何调用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()方法来静音笔划。注意:如果在 shape()之后调用setTexture(),我会得到相同的越界异常。