Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
schule:klassen:2017:10b:kap8 [2018/01/04 19:44]
martin [Lösung]
schule:klassen:2017:10b:kap8 [2018/01/04 19:53] (aktuell)
martin [Lösung]
Zeile 58: Zeile 58:
   - Lagere die Mittelwertberechnung in eine eigene Methode aus!   - Lagere die Mittelwertberechnung in eine eigene Methode aus!
   - Schreibe eine Methode, die die beste Note im Feld ''​noten''​ ermittelt und zurückgibt!   - Schreibe eine Methode, die die beste Note im Feld ''​noten''​ ermittelt und zurückgibt!
-=====Lösung=====+===== Lösung =====
 <code java> <code java>
     private double mittelwert(int[] notenliste){     private double mittelwert(int[] notenliste){
Zeile 86: Zeile 86:
     }     }
 </​code>​ </​code>​
 +
 +
 +===== Anwendung: Einfache Particle Engine =====
 +{{ :​schule:​klassen:​2017:​10b:​particle_engine.png?​600 |}}
 +
 +Hier die Klasse für die Partikel:
 +<​code>​
 +import sge.Kreis;
 +
 +public class Particle {
 +
 +    private Kreis k;
 +    private double vx, vy;  // Geschwindigkeit in x- bzw. y-Richtung
 +
 +    public Particle(double x, double y, double vx, double vy){
 +        this.vx = vx;
 +        this.vy = vy;
 +
 +        k = new Kreis(x, y, 7);
 +        k.setFuellfarbe("​gelb"​);​
 +        k.setFuellfarbeAlpha(200); ​ // leicht durchsichtig
 +    }
 +
 +    public void zeitschritt(){
 +        k.verschieben(vx,​ vy);
 +        vy += 0.04;
 +        if(vy > 0){
 +            k.setFuellfarbe("​orange"​);​
 +            k.setFuellfarbeAlpha(128);​
 +        }
 +    }
 +
 +    public boolean istAußerhalbDesFensters(){
 +        return k.istAußerhalbDesFensters();​
 +    }
 +
 +    public void vernichten() {
 +        k.vernichten();​
 +    }
 +}
 +</​code>​
 +
 +Die Partikel werden von der Klasse ''​ParticleEmitter''​ erzeugt und im Feld ''​particles''​ abgelegt. Alle 10 ms wird die Position jedes Partikels neu berechnet. Falls der Partikel das Fenster verlässt, wird er vernichtet und, seine Objektreferenz aus dem Feld ''​particles''​ entfernt und dafür ein neuer Partikel erzeugt. \\ Hier die Klasse ''​ParticleEmitter'':​
 +
 +<code java>
 +import sge.Fenster;​
 +import sge.Timer;
 +import sge.TimerListener;​
 +
 +public class ParticleEmitter implements TimerListener {
 +
 +    // Wir speichern alle Partikel in einem Feld, damit wir
 +    // später alle 10 ms die Positionen aller Partikel neu berechnen ​
 +    // und überflüssige Partikel entfernen können:
 +    private Particle[] particles = new Particle[200];​
 +    ​
 +    // Objektreferenz aufs Fenster, damit wir dessen Größe ermitteln können
 +    private Fenster f;
 +
 +    public ParticleEmitter(){
 +
 +        f = new Fenster(); // Fenster öffnen
 +
 +        // Der Timer sorgt dafür, dass timerSignalVerarbeiten alle 10 ms aufgerufen wird:
 +        Timer timer = new Timer(this, 10);
 +        timer.start();​
 +
 +    }
 +
 +    @Override
 +    public void timerSignalVerarbeiten() {
 +        ​
 +        // Falls es im Feld particles eine Leerstelle (Wert == null) gibt, erzeuge einen neuen 
 +        // Partikel und lege seine Objektreferenz dort ab.
 +        for(int i = 0; i < particles.length;​ i++){
 +            if(particles[i] == null){
 +                Particle particle = new Particle(f.getBreite()/​2,​ f.getHoehe() - 20,
 +                        Math.random()*10.0 - 5, -5 - Math.random() * 5);
 +                particles[i] = particle;
 +                break;
 +            }
 +        }
 +        ​
 +        // Für alle Partikel im Feld particles: Ändere die Position und
 +        // entferne den Partikel, falls er sich aus dem Fenster herausbewegt hat:
 +        for(int i = 0; i < particles.length;​ i++){
 +
 +            if(particles[i] != null) {
 +                ​
 +                particles[i].zeitschritt();​
 +                ​
 +                if(particles[i].istAußerhalbDesFensters()){
 +                    particles[i].vernichten();​
 +                    particles[i] = null;
 +                }
 +
 +            }
 +
 +        }
 +
 +    }
 +}
 +</​code>​
 +
 +Hier noch der Code der Starterklasse:​
 +<​code>​
 +public class ParticleEmitterStarter {
 +
 +    public static void main(String[] args) {
 +        new ParticleEmitter();​
 +    }
 +
 +}
 +</​code>​
 +
Drucken/exportieren
QR-Code
QR-Code schule:klassen:2017:10b:kap8 (erstellt für aktuelle Seite)