2016-10-23 9 views
1

処理で基本的な「ツリー」シェイプを作成しようとしています。私は最初のコンストラクタを引数にとり、バックグラウンド上の固定された場所に描画しますが、指定されたランダムな値を割り当てる2次コンストラクタも用意されており、ツリーが描画されるたびに異なる場所に配置されます。しかし、私はThe function random(int) does not existと言いますが、この問題の解決策を見つけることができないと考えています。処理3.xでrandom()関数が認識されない

これはグラフィックに対する素朴なアプローチだと私は認識していますが、私は自分の足をProcessingに濡らすよう努めています。

マイ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

Treeクラスから、random()関数を呼び出していますが、スケッチクラスではありません。これは機能しません。スケッチクラスだけがrandom()関数について知っているからです。

これを修正する方法の1つは、スケッチのインスタンスを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申し訳ありませんが、それはタイプミスでした。私の編集された答え、具体的には、 'random()'関数を呼び出す 'sketch'変数の使い方を見てください。 –

+0

ありがとう、これは動作します。 – Jodo1992

関連する問題