处理 3.x 无法识别 random() 函数
Processing 3.x not recognizing random() function
我试图在处理中创建一个基本的 "tree" 形状。我有一个初始构造函数,它接受我的参数并将它们绘制在背景的固定位置,但我还有一个辅助构造函数,它应该分配我指定的随机值,以便每次绘制时树都位于不同的位置。但是,我在处理 The function random(int) does not exist
时遇到问题,我似乎找不到解决该问题的方法。
我意识到这是一种幼稚的图形处理方法,但我只是想尝试使用 Processing。
我的Tree.javaclass:
import processing.core.PApplet;
import java.util.Random;
public class Tree{
// Instance variables
private int centerX, centerY;
private float scale;
private int trunkR, trunkG, trunkB, leavesR, leavesG, leavesB;
private static PApplet sketch;
public Tree(int theCenterX, int theCenterY, float theScale,
int theTrunkR, int theTrunkG, int theTrunkB,
int theLeavesR, int theLeavesG, int theLeavesB)
{
centerX = theCenterX;
centerY = theCenterY;
scale = theScale;
trunkR = theTrunkR;
trunkG = theTrunkG;
trunkB = theTrunkB;
leavesR = theLeavesR;
leavesG = theLeavesG;
leavesB = theLeavesB;
}
public Tree(){
centerX = random(960.0);
centerY = random(700.0);
scale = random(2.0);
trunkR = random(255.0);
trunkG = random(255.0);
trunkB = random(255.0);
leavesR = random(255.0);
leavesG = random(255.0);
leavesB = random(255.0);
}
public void draw(){
sketch.noStroke();
sketch.fill(trunkR, trunkG, trunkB);
sketch.rect(centerX, centerY, 80*scale, 300*scale);
sketch.fill(leavesR, leavesG, leavesB);
sketch.triangle(centerX - 40*scale, centerY + 40*scale, centerX + 40*scale, centerY - 80*scale, centerX + 120*scale, centerY + 40*scale);
}
public static void setup(PApplet theSketch){
sketch = theSketch;
}
}
这是我的主要 class 调用树 class 来创建对象:
Tree tree, tree2, tree3, tree4, randomTree;
void settings(){
size(1000, 1000);
}
void setup(){
setupGraphicClasses();
tree = new Tree(width/2 - 400, height/2 - 100, 1.0, 67, 12, 12, 27, 129, 28);
tree2 = new Tree(width/2 + 200, height/2 + 150, 1.5, 67, 12, 12, 27, 129, 28);
tree3 = new Tree(width/2, height/2 - 80, 0.5, 67, 12, 12, 27, 129, 28);
tree4 = new Tree(width/2 + 320, height/2 - 170, 0.9, 67, 12, 12, 27, 129, 28);
randomTree = new Tree();
}
void draw() {
background(127);
noStroke();
fill(16, 85, 17);
rect(0, 500, 1000, 500);
fill(70, 195, 255);
rect(0, 0, 1000, 500);
tree.draw();
tree4.draw();
tree2.draw();
tree3.draw();
randomTree.draw();
}
public void setupGraphicClasses() {
Tree.setup(this);
}
为什么我会收到此错误?我尝试将实例变量转换为 float
,因为这些是 random()
函数接受的参数,但随后我收到了不同的错误消息。
您是从 Tree
class 而不是您的草图 class 调用 random()
函数。那是行不通的,因为只有草图 class 知道 random()
函数。
解决此问题的一种方法是将您的草图实例传递到 Tree
class,然后使用它来获取随机函数。像这样:
void setup(){
Tree tree = new Tree(this);
}
class Tree{
public Tree(PApplet sketch){
float x = sketch.random(100);
}
}
如果您只需要 random()
函数,那么这可能有点矫枉过正。您可以改用 Math.random()
函数。当然,这会将您锁定为 Java 部署,这可能过于严格。
我试图在处理中创建一个基本的 "tree" 形状。我有一个初始构造函数,它接受我的参数并将它们绘制在背景的固定位置,但我还有一个辅助构造函数,它应该分配我指定的随机值,以便每次绘制时树都位于不同的位置。但是,我在处理 The function random(int) does not exist
时遇到问题,我似乎找不到解决该问题的方法。
我意识到这是一种幼稚的图形处理方法,但我只是想尝试使用 Processing。
我的Tree.javaclass:
import processing.core.PApplet;
import java.util.Random;
public class Tree{
// Instance variables
private int centerX, centerY;
private float scale;
private int trunkR, trunkG, trunkB, leavesR, leavesG, leavesB;
private static PApplet sketch;
public Tree(int theCenterX, int theCenterY, float theScale,
int theTrunkR, int theTrunkG, int theTrunkB,
int theLeavesR, int theLeavesG, int theLeavesB)
{
centerX = theCenterX;
centerY = theCenterY;
scale = theScale;
trunkR = theTrunkR;
trunkG = theTrunkG;
trunkB = theTrunkB;
leavesR = theLeavesR;
leavesG = theLeavesG;
leavesB = theLeavesB;
}
public Tree(){
centerX = random(960.0);
centerY = random(700.0);
scale = random(2.0);
trunkR = random(255.0);
trunkG = random(255.0);
trunkB = random(255.0);
leavesR = random(255.0);
leavesG = random(255.0);
leavesB = random(255.0);
}
public void draw(){
sketch.noStroke();
sketch.fill(trunkR, trunkG, trunkB);
sketch.rect(centerX, centerY, 80*scale, 300*scale);
sketch.fill(leavesR, leavesG, leavesB);
sketch.triangle(centerX - 40*scale, centerY + 40*scale, centerX + 40*scale, centerY - 80*scale, centerX + 120*scale, centerY + 40*scale);
}
public static void setup(PApplet theSketch){
sketch = theSketch;
}
}
这是我的主要 class 调用树 class 来创建对象:
Tree tree, tree2, tree3, tree4, randomTree;
void settings(){
size(1000, 1000);
}
void setup(){
setupGraphicClasses();
tree = new Tree(width/2 - 400, height/2 - 100, 1.0, 67, 12, 12, 27, 129, 28);
tree2 = new Tree(width/2 + 200, height/2 + 150, 1.5, 67, 12, 12, 27, 129, 28);
tree3 = new Tree(width/2, height/2 - 80, 0.5, 67, 12, 12, 27, 129, 28);
tree4 = new Tree(width/2 + 320, height/2 - 170, 0.9, 67, 12, 12, 27, 129, 28);
randomTree = new Tree();
}
void draw() {
background(127);
noStroke();
fill(16, 85, 17);
rect(0, 500, 1000, 500);
fill(70, 195, 255);
rect(0, 0, 1000, 500);
tree.draw();
tree4.draw();
tree2.draw();
tree3.draw();
randomTree.draw();
}
public void setupGraphicClasses() {
Tree.setup(this);
}
为什么我会收到此错误?我尝试将实例变量转换为 float
,因为这些是 random()
函数接受的参数,但随后我收到了不同的错误消息。
您是从 Tree
class 而不是您的草图 class 调用 random()
函数。那是行不通的,因为只有草图 class 知道 random()
函数。
解决此问题的一种方法是将您的草图实例传递到 Tree
class,然后使用它来获取随机函数。像这样:
void setup(){
Tree tree = new Tree(this);
}
class Tree{
public Tree(PApplet sketch){
float x = sketch.random(100);
}
}
如果您只需要 random()
函数,那么这可能有点矫枉过正。您可以改用 Math.random()
函数。当然,这会将您锁定为 Java 部署,这可能过于严格。