Обработка 3.x не распознает функцию random()

#java #random #processing #draw

#java #Случайный #обработка #рисовать

Вопрос:

Я пытаюсь создать базовую форму «дерева» при обработке. У меня есть начальный конструктор, который принимает мои аргументы и рисует их в фиксированных местах в фоновом режиме, но у меня также есть вторичный конструктор, который должен присваивать случайные значения, которые я указываю, чтобы при каждом рисовании деревья находились в разных местах. Однако у меня возникла проблема с обработкой, где указано The function random(int) does not exist , и я, похоже, не могу найти решение проблемы.

Я понимаю, что это наивный подход к графике, но я просто пытаюсь разобраться с обработкой.

Мой Tree.java класс:

 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;
    }
}
  

И вот мой основной класс, который вызывает класс tree для создания объектов:

 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() функция принимает в качестве параметров, но затем я получаю другое сообщение об ошибке.

Ответ №1:

Вы вызываете random() функцию из своего Tree класса, а не из класса sketch. Это не сработает, потому что только класс sketch знает об random() функции.

Один из способов исправить это — передать экземпляр вашего sketch в Tree класс, а затем использовать его для доступа к функции random. Что-то вроде этого:

 void setup(){
   Tree tree = new Tree(this);
}

class Tree{

   public Tree(PApplet sketch){
      float x = sketch.random(100);
   }
}
  

Если все, что вам нужно, это random() функция, это может быть излишним. Вместо этого вы могли бы просто использовать Math.random() функцию. Конечно, это блокирует развертывание как Java, что может быть чрезмерно ограничительным.

Комментарии:

1. @Jodo1992 Извините, это была опечатка. Пожалуйста, посмотрите мой отредактированный ответ, в частности, как я использую sketch переменную для вызова random() функции.