2016-04-19 20 views
1

Ich arbeite daran, diesen freien Quellcode, den ich gefunden habe (http://solemone.de/demos/snow-effect-processing/), in eine Klasse zu verwenden, die ich in einem größeren, komplexeren "Spiel" -Code verwenden kann. Es ist ein ziemlich grundlegender Schneefall Code:Wie man den Hauptcode in eine Klasse (Schneefall) umwandelt

int quantity = 15; 
float [] xPosition = new float[quantity]; 
float [] yPosition = new float[quantity]; 
int [] flakeSize = new int[quantity]; 
int [] direction = new int[quantity]; 
int minFlakeSize = 10; 
int maxFlakeSize = 20; 

void setup() { 

    size(800, 350); 
    frameRate(30); 
    noStroke(); 
    smooth(); 

    for(int i = 0; i < quantity; i++) { 
    flakeSize[i] = round(random(minFlakeSize, maxFlakeSize)); 
    xPosition[i] = random(0, width); 
    yPosition[i] = random(0, height); 
    direction[i] = round(random(0, 1)); 
    } 

} 

void draw() { 

    background(0); 

    for(int i = 0; i < xPosition.length; i++) { 

    ellipse(xPosition[i], yPosition[i], flakeSize[i], flakeSize[i]); 

    if(direction[i] == 0) { 
     xPosition[i] += map(flakeSize[i], minFlakeSize, maxFlakeSize, .1, .5); 
    } else { 
     xPosition[i] -= map(flakeSize[i], minFlakeSize, maxFlakeSize, .1, .5); 
    } 

    yPosition[i] += flakeSize[i] + direction[i]; 

    if(xPosition[i] > width + flakeSize[i] || xPosition[i] < -flakeSize[i] || yPosition[i] > height + flakeSize[i]) { 
     xPosition[i] = random(0, width); 
     yPosition[i] = -flakeSize[i]; 
    } 

    } 

} 

Ich habe ganz einfach nicht begriffen, wie das für() trennen Schleifen, ganze Zahlen und Arrays in Funktionen, die ich in eine separate Klasse setzen kann, dass ich den Titel habe Schnee, damit ich es leicht bewegen und im größeren Code manipulieren kann. Hier ist einer meiner (vielen) versucht, so weit:

Klasse Tab:

class Snow{ 


int quantity = 15; 
float [] xPosition = new float[quantity]; 
float [] yPosition = new float[quantity]; 
int [] flakeSize = new int[quantity]; 
int [] direction = new int[quantity]; 
int minFlakeSize = 10; 
int maxFlakeSize = 20; 

Snow(){ 
    frameRate(30); 
    noStroke(); 
    smooth(); 
} 

void display() { 
    flakeSize = round(random(minFlakeSize, maxFlakeSize)); 
    xPosition = random(0, width); 
    yPosition = random(0, height); 
    direction = round(random(0, 1)); 
    } 



void update() { 

    for(int i = 0; i < xPosition.length; i++) { 

    ellipse(xPosition[i], yPosition[i], flakeSize[i], flakeSize[i]); 

    if(direction[i] == 0) { 
     xPosition[i] += map(flakeSize[i], minFlakeSize, maxFlakeSize, .1, .5); 
    } else { 
     xPosition[i] -= map(flakeSize[i], minFlakeSize, maxFlakeSize, .1, .5); 
    } 

    yPosition[i] += flakeSize[i] + direction[i]; 

    if(xPosition[i] > width + flakeSize[i] || xPosition[i] < -flakeSize[i] || yPosition[i] > height + flakeSize[i]) { 
     xPosition[i] = random(0, width); 
     yPosition[i] = -flakeSize[i]; 
    } 

    } 

} 
} 

Haupt Tab:

//Ice 
Snow [] flakes = new Snow[15]; 
int quantity = 15; 

void setup(){ 
size(600,800); 
flakes = new Snow[15]; 

} 

void draw(){ 
background(0); 
for(int i = 0; i < quantity; i++){ 
flakes[i].display(); 
flakes[i].update(); 
} 

} 

Ich bin sicher, es ist ein wirklich einfaches Wegbrechen des Codes nach unten und sie in die richtigen Orte zu trennen, aber ich kann es nicht begreifen. Wenn mir jemand mit diesem Prozess helfen könnte, würde ich es sehr schätzen.

+0

Uhhh das sieht nicht wie Javascript aus ...? – Tuvia

+0

Oh! Es tut uns leid! Es ist Java in Processing.org. Ich habe Javascript versehentlich eingefügt. – SmokeAndAsh

Antwort

3

macht keinen Sinn Dieser Code machen, weil die Snow Klasse die Verfolgung von jeder Schneeflocke zu sein scheint, aber Sie haben dann mehrere Instanzen von Snow.

Anstatt zu versuchen, zufälligen Code in Ihre Skizze zu kopieren, haben Sie viel besser mehr Glück, wenn Sie einen Schritt zurück, beginnen ein wenig kleiner, versuchen zu verstehen, was der Code tut, und dann schreiben Sie eigener Code.

Schritt 1: Können Sie eine Klasse erstellen, die die Daten und das Verhalten für eine einzelne Schneeflocke kapselt?

Mach dir keine Sorgen über mehrere Schneeflocken noch. Mach einfach etwas sehr einfaches Arbeiten. Hier ist ein einfaches Beispiel Klasse:

class SnowFlake{ 

    float x = random(width); 
    float y = random(height); 
    float r = random(10); 

    void draw(){ 
    ellipse(x, y, r, r); 

    y++; 

    if(y > height){ 
    y = 0; 
    x = random(width); 
    } 
    } 
} 

Schritt 2: Können Sie diese Klasse in einer einzelne Variable verwenden, um eine einzelne Schneeflocke zu ziehen?

Sie könnten ein kleines Beispiel Skizze wie folgt erstellen:

SnowFlake snowFlake; 

void setup(){ 
    size(500, 500); 
    snowFlake = new SnowFlake(); 
} 

void draw(){ 
    background(0); 
    snowFlake.draw(); 
} 

diese einzelne Schneeflocke, bevor er auf gut funktionierend Holen.

Schritt 3: Nun, da Sie die einzelne Schneeflocke arbeiten, können Sie ein Array oder ArrayList verwenden, um mehrere Schneeflocken zu erstellen?

Wenn Sie in kleinen Schritten arbeiten, wird es leicht sein, eine Sache zu einer Zeit hinzuzufügen:

ArrayList<SnowFlake> snowFlakes = new ArrayList<SnowFlake>(); 

void setup() { 
    size(500, 500); 

    for (int i = 0; i < 100; i++) { 
    snowFlakes.add(new SnowFlake()); 
    } 
} 

void draw() { 
    background(0); 
    for (SnowFlake snowFlake : snowFlakes) { 
    snowFlake.draw(); 
    } 
} 

Sie können nicht Programm von blind versuchen, Code zu-Paste kopieren in Ihre skizzieren. Sie müssen wirklich verstehen, was es tut, und Sie sind normalerweise besser dran, nur Ihren eigenen Code basierend auf diesem Verständnis zu schreiben. Viel Glück!

+1

Danke, Kevin! Ich wollte ehrlich gesagt von Anfang an meinen eigenen Code erstellen, aber ich hatte keine Ahnung, wo ich anfangen sollte. Ich hatte gehofft, dass das Ausleihen von Code mich auf einen besseren Weg bringen würde, aber es hat nur dazu geführt, dass ich die Dinge noch mehr verwirrte. Ich schätze Ihre eingehende Antwort sehr. Ich habe derzeit ein Problem, den grundlegenden Java-Code-Prozess im Moment zu verstehen, und Erklärungen wie deine helfen mir wirklich, etwas mehr herauszufinden. Vielen Dank! – SmokeAndAsh