2016-10-27 80 views
1

下面的代码产生数组越界异常(ArrayIndexOutOfBoundsException异常:-2)Processing3 PShape.setTexture数组索引越界错误

我不知道为什么,我一直在网上下面的教程。已经通读了参考文献并处理了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); 
} 
+0

此代码适合我。你能提供一个到你正在使用的图像文件的链接吗? –

+0

@KevinWorkman https://www.google.ie/search?q=planet+surface&source=lnms&tbm=isch&sa=X&ved=0ahUKEwi8x9nP5PnPAhVFDxoKHf0HDugQ_AUICCgB&biw=1280&bih=934#imgrc=DUtjhR4My7C6cM%3A –

+0

你介意我问你是什么操作系统。我开始认为这是一个与Ubuntu 16.4 –

回答

0

它可以帮助实例化的形状只有一次和设置内调用大小()之后这样做()。绘制循环可以简单地显示形状和纹理。 note注意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); 
} 

更新:两线固定在上面的代码:纹理设置调用形状()和.setStroke()方法应在my_ball对象上调用以静音笔划。注意:如果在 shape()后setTexture()被调用,我会得到相同的越界异常。

+0

你运行过OP的原始代码吗?你有没有得到同样的错误?如果没有,那么这段代码并不是真的“修复”任何东西。我同意一次只调用'createShape()'函数对于这个小例子来说是一个好主意,但在OP的完整草图中可能不是这种情况,OP的代码应该可以工作,并且在我的计算机上工作正常。它在你的机器上工作吗? –

+0

@詹姆斯邓恩,这些变化现在不给JM错误,但图像加载不正确和noFill()noStroke()调用被忽略。我在draw函数的开始处有noStroke()和noFill(),并且刚好在a.show() –

+0

@ kevin-workman之上,请参阅更新。在遇到与OP相同的错误并且没有正确地看到纹理贴图之后,我调查并找到了正确的协议。 OP,请在您的配置上尝试更新的代码。 –