K
Kappadona
Gast
Hallo zusammen.
Ich weiss das es schon viele Partikelprogramme gibt, aber ich wollte halt selber eines machen, damit ich es auch selber lerne. Und jetzt habe ich es total anders als die, die ich im Internet gefunden habe. Also kann ich da jetzt auch nicht mehr spicken.
Und jetzt habe ich zwei Bitten an euch; Also 1. könntet ihr mir ev. mal sagen wie ich so programmiere, also auf Konventionen bezogen, nicht auf die Funktionalität.
Und 2. habe ich eben ein Problem, das es nicht funktioniert..
Der Fehler: Die Partikel verschwinden einfach so nach 3-5 sek(manchmal auch später)
Und sie ziehen sich nicht wirklich an..
Ich habe 3 Klassen: Main, Frame, Particle.
Im Main initialisiere ich ein Particle-Array mit 200 plätzen, das gebe ich dann ans Frame, dort Zeichne ich auch mit BufferStrategy, und an die Particle Klasse selbst.
Nun der Code der Particle Klasse:
OK, also ich hoffe das Forum ist überhaupt für solche sachen Gedacht!
Gruss
Ich weiss das es schon viele Partikelprogramme gibt, aber ich wollte halt selber eines machen, damit ich es auch selber lerne. Und jetzt habe ich es total anders als die, die ich im Internet gefunden habe. Also kann ich da jetzt auch nicht mehr spicken.
Und jetzt habe ich zwei Bitten an euch; Also 1. könntet ihr mir ev. mal sagen wie ich so programmiere, also auf Konventionen bezogen, nicht auf die Funktionalität.
Und 2. habe ich eben ein Problem, das es nicht funktioniert..
Der Fehler: Die Partikel verschwinden einfach so nach 3-5 sek(manchmal auch später)
Und sie ziehen sich nicht wirklich an..
Ich habe 3 Klassen: Main, Frame, Particle.
Im Main initialisiere ich ein Particle-Array mit 200 plätzen, das gebe ich dann ans Frame, dort Zeichne ich auch mit BufferStrategy, und an die Particle Klasse selbst.
Nun der Code der Particle Klasse:
Java:
import java.awt.Color;
import java.util.Random;
public class Particle {
private float f_posx;
private float f_posy;
private float f_speedx;
private float f_speedy;
private Color color;
private Random random = new Random();
// Initialisiere ein Partikel an einer Position, und mit einer Farbe, dass
// klappt meiner Meinung nach ziemlich gut.
public Particle(float x, float y) {
this.f_posx = x;
this.f_posy = y;
color = new Color(random.nextInt(200), random.nextInt(200),
random.nextInt(200));
}
public Color getColor() {
return color;
}
public float getX() {
return f_posx;
}
public float getY() {
return f_posy;
}
public void update(Particle[] particles) {
// Hier addiere ich den Speed auf die momentane Position das Paricle
// Array gebe ich hier auch weiter, da die Speed Methode private ist.
f_posx += getSpeedx(particles);
f_posy += getSpeedy(particles);
// Dass sind einfach die Randbegrenzungen, und ich rechen den speed mal
// -1 wenn das Partikel einen Rand erreicht
if (f_posx < 50) {
f_posx = 50;
f_speedx = f_speedx * (-1);
} else if (f_posx > 950) {
f_posx = 950;
f_speedx = f_speedx * (-1);
}
if (f_posy < 50) {
f_posy = 50;
f_speedy = f_speedy * (-1);
} else if (f_posy > 570) {
f_posy = 570;
f_speedy = f_speedy * (-1);
}
}
private float getSpeedx(Particle[] particles) {
for (int i = 0; i < particles.length; i++) {
// Wenn die Position genau Gleich ist ist es entweder das Gleiche
// Partikel, oder Es liegt genau auf dem gleichen Punkt
if (!(particles[i].getX() - f_posx == 0)) {
// Hier Mache ich mir ein "Dreieck, zwischen den zwei Punkten,
// x, y = katethen, stecke = hypothenuse
float x = (particles[i].getX() - f_posx);
float y = (particles[i].getY() - f_posy);
float f_stecke = (float) Math.sqrt(Math.pow(x, 2)
+ Math.pow(y, 2));
// Dann brauche ich das Verhätniss zwischen den katheten da dass
// viel zu gross wäre mutipliziere ich es mit einer sehr kleinen
// Zahl..
float f_verhaeltnis = (x / y) * 0.00000001f;
// Mit dem Verhältniss multipliziere ich nun einfach die sie
// Hypothenuse, denn wenn x klein ist, aber y riesig, muss ja
// speedx trotzdem nicht gross sein.
f_speedx += f_stecke * f_verhaeltnis;
}
}
return f_speedx;
}
// Dann das selbe für y.
private float getSpeedy(Particle[] particles) {
for (int i = 0; i < particles.length; i++) {
if (!(particles[i].getY() - f_posy == 0)) {
float x = (particles[i].getX() - f_posx);
float y = (particles[i].getY() - f_posy);
float f_verhaeltnis = (y / x) * 0.00000001f;
float f_stecke = (float) Math.sqrt(Math.pow(x, 2)
+ Math.pow(y, 2));
f_speedy += f_stecke * f_verhaeltnis;
}
}
return f_speedy;
}
}
OK, also ich hoffe das Forum ist überhaupt für solche sachen Gedacht!
Gruss