以下代码生成一个数组超出范围的异常(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);
}
答案 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(),我会得到相同的越界异常。