处理 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 部署,这可能过于严格。