1one Geschrieben 28. Februar 2009 Geschrieben 28. Februar 2009 Hallo, ich habe mich etwas mit Netbeans und Java befasst und ein paar Tutorials und Beispielaufgaben auf dem Inet durchgearbeitet. Bei einer Aufgabe komme ich leider in stocken. Bei der Aufgabe handelt es sich um das Erstellen von Raketen zb. Sylversterraketen. Als ich Probleme hatte, diese bunten Funken nach der Explosion zu erstellen habe ich mir das fertig Program aus dem Inet gesaugt und angeschaut. Doch was dort steht, zu den bunten Funken, is mehr mehr oder minder ein Rätsel. Ich poste es mal... partikel[] p= new partikel[100]; int r_vx=(r_ziel_x-r_start_x)/40; int r_vy=(r_ziel_y-r_start_x)/60; int r_x=(r_ziel_x); int r_y=(r_ziel_y); int t_x; int t_y; int t_r; Color t_c; double ent=Math.random(); if (ent<0.33) { t_c=new Color(205+(int)(Math.random()*50),0,0); } else if (ent>0.67){ t_c=new Color(0,205+(int) (Math.random()*50),0,0); } else { t_c = new Color (0,0,205+(int)(Math.random()*50)); } for (int i=0; i<100; i++) { p = new partikel(r_x, r_y, r_vx, r_vy, Math.random()*10, Math.random()*2*Math.PI, t_c); g.setColor(p.c); t_x=(int)(p.x-p.r); t_y=(int)(p.y-p.r); t_r=(int)(2*p.r); g.fillOval(t_x, t_y, t_r, t_r); } for(int i=0; i<50; i++) { for(int j=0; j<100; j++) { g.setColor(Color.BLACK); t_x=(int)(p[j].x-p[j].r); t_y=(int)(p[j].y-p[j].r); t_r=(int)(2*p[j].r); g.fillOval(t_x, t_y, t_r, t_r); p[j].move(); g.setColor(p[j].c); t_x=(int)(p[j].x-p[j].r); t_y=(int)(p[j].y-p[j].r); t_r=(int)(2*p[j].r); g.fillOval(t_x, t_y, t_r, t_r); } pause(50); } Diese Partikel sollen wohl diese Funken darstellen. Im großen und ganzen habe ich das ja verstanden, nur ich würde gerne im Detail wissen, was da jetzt genau abläft und welcher Befehl genau was aussagt. So wie ich das verstanden habe, handelt es sich bei dem ersten Absatz um die einfache initialisierung der Variablen und das errechnen der Farbe der Partikel. Doch ich verstehe nich was die Variable "r_" vor den anderen zu bedeutet hat. Ganz zu schweigen von den beiden Absätzen die folgen. Ich würde mich freuen, wenn mir jemand etwas unter die Arme greifen könnte... gruß 1one Zitieren
VaNaTiC Geschrieben 28. Februar 2009 Geschrieben 28. Februar 2009 (bearbeitet) partikel[] p= new partikel[100]; [COLOR="Red"]// array p instanziieren mit 100 elementen von partikeln[/COLOR] int r_vx=(r_ziel_x-r_start_x)/40; [COLOR="#ff0000"]// 40.teil des x-vektors, wozu benötigt, evtl. später zu sehen[/COLOR] int r_vy=(r_ziel_y-r_start_x)/60; [COLOR="#ff0000"]// 60.teil des y-vektors, kein Z also 2D[/COLOR] int r_x=(r_ziel_x); [COLOR="#ff0000"]// X-Vektor oder banal gesagt Koordinate[/COLOR] int r_y=(r_ziel_y); [COLOR="#ff0000"]// Y[/COLOR] int t_x; [COLOR="#ff0000"]// \[/COLOR] int t_y; [COLOR="#ff0000"]// - lokale Temp Variablen[/COLOR] int t_r;[COLOR="#ff0000"] // /[/COLOR] Color t_c; double ent=Math.random();[COLOR="#ff0000"] // "zufällige" Zahl mathematisch zwischen [0..1) im rellen Bereich[/COLOR] if (ent<0.33) { t_c=new Color(205+(int)(Math.random()*50),0,0); [COLOR="#ff0000"]// zufällige Abstufung von relativ rot bis rot[/COLOR] } else if (ent>0.67){ t_c=new Color(0,205+(int) (Math.random()*50),0,0); [COLOR="#ff0000"]// zufällige Abstufung von relativ grün bis grün[/COLOR] } else { t_c = new Color (0,0,205+(int)(Math.random()*50)); [COLOR="#ff0000"]// zufällige Abstufung von relativ blau bis blau[/COLOR] } [COLOR="#ff0000"] [/COLOR]// Schleife über das array, sollte aber besser for ... i<p.length lauten for (int i=0; i<100; i++) { p[i] = new partikel(r_x, r_y, r_vx, r_vy, [COLOR="#ff0000"]// instanziieren des jeweiligen Elements im Array[/COLOR] Math.random()*10, [COLOR="#ff0000"]// mit Zufallswerten[/COLOR] Math.random()*2*Math.PI, t_c); g.setColor(p[i].c);[COLOR="#ff0000"]// oben gebildete Farbe setzen[/COLOR] t_x=(int)(p[i].x-p[i].r); [COLOR="#ff0000"]// Ursprungs-Koordinate X minus Radius (also für zeichenroutine nach links schieben)[/COLOR] t_y=(int)(p[i].y-p[i].r);[COLOR="#ff0000"] // Y - Radius, also für Zeichenroutine nach oben schieben (vermute, Zeichenroutine zeichnen von außen)[/COLOR] t_r=(int)(2*p[i].r);[COLOR="#ff0000"] // Radius als Durchmesser[/COLOR] g.fillOval(t_x, t_y, t_r, t_r); [COLOR="#ff0000"]// ausgefüllte Ellipse bilden (hier speziel Kreis, weil zweimal t_r als Radius)[/COLOR] } [COLOR="#ff0000"]// verschachtelte Schleife läuft 50mal über alle 100 partikel und wartet dabei pause(50)[/COLOR] for(int i=0; i<50; i++) { [COLOR="#ff0000"]// pro i über alle 100 partikel[/COLOR] for(int j=0; j<100; j++) { g.setColor(Color.BLACK);[COLOR="#ff0000"] // schwarze Farbe als aktuelle auf Grafikzeichenfläche setzen[/COLOR] t_x=(int)(p[j].x-p[j].r); t_y=(int)(p[j].y-p[j].r); t_r=(int)(2*p[j].r); g.fillOval(t_x, t_y, t_r, t_r); [COLOR="#ff0000"]// das ist die alte Stelle und hier wird das alte farbige Partikel schwarz überzeichnet[/COLOR] p[j].move(); [COLOR="#ff0000"]// jetzt wird das Partikel irgendwohin bewegt, wahrscheinlich nur ein bissl verschoben[/COLOR] g.setColor(p[j].c); [COLOR="#ff0000"]// jetzt wird wieder die ursprüngliche Farbe gesetzt[/COLOR] t_x=(int)(p[j].x-p[j].r); t_y=(int)(p[j].y-p[j].r); t_r=(int)(2*p[j].r); g.fillOval(t_x, t_y, t_r, t_r);[COLOR="#ff0000"] // und an die neue Stelle farbig gezeichnet[/COLOR] } pause(50);[COLOR="#ff0000"]// wahrscheinlich 50 Millisekunden warten[/COLOR] } r_ ist wahrscheinlich der Richtungsvektor, der von einer anderen Stelle übergeben wird. Die beiden Absätze die folgen sind: - einmal eine Schleife über alle 100 Elemente, wobei diese Partikel zufällig initialisiert, positioniert und das erste mal gezeichnet werden - und der zweite Absatz zeichnet 50mal wahrscheinlich alle 50ms eine Veränderung der Funken nach einer Positionsverschiebung auf eine schwarze Zeichnenfläche das vorher gezeichnete Objekt schwarz übermalen ist eine beliebte Methode um das Objekt von der Zeichenfläche zu "löschen" und nach Verschiebung wirds einfach neu gezeichnet. Und dann im nächsten der 50 Schritte dasselbe nochmal. Das ist ein sehr simple Animation Bearbeitet 28. Februar 2009 von VaNaTiC Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.