#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()
функции.