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() 之后被调用,我会得到同样的越界异常。
以下代码产生数组越界异常(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() 之后被调用,我会得到同样的越界异常。