2016-10-23 14 views
1

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

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

Мой 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, 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, а не класса эскиза. Это не сработает, потому что только класс эскиза знает о функции random().

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

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

class Tree{ 

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

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

+0

Я получаю ту же ошибку, используя этот метод. – Jodo1992

+1

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

+0

Спасибо, это работает. – Jodo1992

 Смежные вопросы

  • Нет связанных вопросов^_^