Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung | |||
faecher:informatik:oberstufe:java:breakout:breakout04:start [04.12.2019 12:57] – sbel | faecher:informatik:oberstufe:java:breakout:breakout04:start [Unknown date] (aktuell) – gelöscht - Externe Bearbeitung (Unknown date) 127.0.0.1 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ====== Schritt 4: Den Ball zum Leben erwecken ====== | ||
- | |||
- | |||
- | ====== Bewegung in x-Richtung ====== | ||
- | |||
- | Der Ball soll sich zunächst nur in x-Richtung bewegen. | ||
- | |||
- | Öffne die Klasse '' | ||
- | |||
- | <code java> | ||
- | public void act() { | ||
- | setLocation(getX() + 1, getY()); | ||
- | } | ||
- | </ | ||
- | |||
- | * Erzeuge wieder einen Ball auf dem Spielfeld. Lasse dir den Objektinspector anzeigen. Rufe die Methode '' | ||
- | * Klicke dann auf die Schaltfläche Run. Beobachte dabei den Ball und seinen Objektinspektor. | ||
- | * Wenn der Ball sich nicht mehr bewegt, klicke auf die Schaltfläche Pause. | ||
- | * Erläutere die Funktionsweisen der drei Schaltflächen Act, Run und Pause. | ||
- | |||
- | Ändere nun in der Methode '' | ||
- | <code java> | ||
- | setLocation(getX() + 2, getY()); | ||
- | </ | ||
- | |||
- | Kompiliere dein Programm. Erzeuge einen Ball, klicke auf Run und beobachte wieder das Verhalten des Balls auf dem Spielfeld und die Änderung seiner Werte im Objektinspektor. Was geschieht, wenn du den ersten Parameter in '' | ||
- | |||
- | * '' | ||
- | * '' | ||
- | * '' | ||
- | * '' | ||
- | * '' | ||
- | |||
- | |||
- | Du hast gesehen, dass die Zahl, die zu '' | ||
- | |||
- | ====== Die Geschwindigkeit als Attribut (Eigenschaft) des Objekts " | ||
- | |||
- | Damit das Spiel interessanter wird, sollte jeder neue Ball eine jeweils andere Anfangsgeschwindigkeit erhalten. Das realisiert man, indem man ihm jeweils andere Änderung in x‑Richtung (dx genannt) zuweist. Dazu benötigt der Ball ein neues Attribut dx. | ||
- | |||
- | |||
- | Die Klasse Ball sollte dann so anfangen: | ||
- | |||
- | <code java> | ||
- | public class Ball extends Actor { | ||
- | private int dx; | ||
- | ... | ||
- | </ | ||
- | |||
- | private bedeutet, dass die Variable dx von außen nicht sichtbar ist. Das Paddle oder ein Block können also dx nicht verändern. Man vermeidet dadurch ungewollte Programmierfehler: | ||
- | |||
- | Die Objektvariable dx ist nun zwar deklariert, sie hat aber noch keinen Anfangswert. Denke daran das Attribut im Konstruktor zu initialisieren, | ||
- | |||
- | Der Konstruktor für die Klasse Ball sieht also so aus: | ||
- | <code java> | ||
- | public Ball() { | ||
- | dx = 10 – Greenfoot.getRandomNumber(21); | ||
- | } | ||
- | </ | ||
- | |||
- | '' | ||
- | |||
- | Nun muss noch die Methode act() geändert werden: | ||
- | |||
- | <code java> | ||
- | public void act() { | ||
- | setLocation(getX() + this.dx, getY()); | ||
- | } | ||
- | </ | ||
- | |||
- | ====== Bitte auch in y-Richtung... ====== | ||
- | |||
- | Jetzt soll sich der Ball auch in y‑Richtung bewegen. Dabei soll der Ball zu Beginn nur nach oben fliegen. | ||
- | |||
- | * Welches Vorzeichen muss dann der Änderungswert dy in y‑Richtung haben? | ||
- | * Erstelle eine Objektvariable dy. | ||
- | * Initialisiere dy im Konstruktor. Der Anfangswert soll eine Zufallszahl zwischen –10 und –5 jeweils einschließlich sein. | ||
- | * Ergänze den zweiten Parameter in setLocation(int x, int y) in der Methode act() entsprechend. | ||
- | |||
- | Teste das Programm mit " | ||
- | |||
- | ====== Reflexion am Spielfeldrand | ||
- | |||
- | Du hast bemerkt, dass der Ball am Rand " | ||
- | Bei der Reflexion an den Spielfeldrändern ändert einer der Werte von dx oder dy sein Vorzeichen. | ||
- | |||
- | {{ .: | ||
- | |||
- | |||
- | |||
- | Die Umkehrung des Vorzeichens kann man folgendermaßen erreichen: | ||
- | <code java> | ||
- | // dx umkehren | ||
- | dx = -dx; | ||
- | // dy umkehren | ||
- | dy = -dy; | ||
- | </ | ||
- | |||
- | |||
- | * Fertige eine Skizze für die Reflexion am linken/ | ||
- | * Wie ändern sich die Werte von dx und dy bei der Reflexion am | ||
- | * oberen Rand? | ||
- | * linken Rand? | ||
- | * unteren Rand? | ||
- | * rechten Rand? | ||
- | |||
- | Der Ball hat den Spielfeldrand erreicht, wenn sein Mittelpunkt weniger als die Hälfte seiner Breite bzw. Höhe vom Spielfeldrand entfernt ist. | ||
- | Um z.B. zu überprüfen, | ||
- | |||
- | Beachte dabei, dass das Spielfeld 640 Pixel breit ist und der Ball einen Durchmesser von 28 Pixel hat. (Wenn du eine andere Ballgrafik verwendest, musst du das evtl. anpassen!) | ||
- | |||
- | <code java> | ||
- | private void reflektiereRandRechts() { | ||
- | if (getX() >= 626) { | ||
- | dx = -dx; | ||
- | } | ||
- | } | ||
- | </ | ||
- | |||
- | Hier wird geprüft, ob die x-Koordinate des Balls – ermittelt mit '' | ||
- | |||
- | Wenn diese Bedingung zutrifft, wird die x-Richtung des Balls umgedreht ('' | ||
- | Die Methode '' | ||
- | |||
- | * Erstelle die Methode '' | ||
- | * Füge den Methodenaufruf deiner neuen Methode in die Methode '' | ||
- | |||
- | Übersetze dein Programm und teste, ob der Ball tatsächlich am rechten Rand reflektiert wird. | ||
- | |||
- | * Schreibe die Methoden | ||
- | * '' | ||
- | * '' | ||
- | * '' | ||
- | * Füge die Methodenaufrufe deiner neu erstellten Methoden an geeigneter Stelle in '' | ||
- | |||
- | Übersetze dein Programm und teste, ob der Ball nun an allen Rändern reflektiert wird. | ||
- | |||
- | ====== Der Ball soll am unteren Rand verschwinden ====== | ||
- | |||
- | In der nächsten Stufe soll der Ball nun nicht mehr am unteren Spielfeldrand reflektiert werden, sondern dort verschwinden. | ||
- | |||
- | * Ersetze die Methode reflektiereRandUnten durch verschwindeRandUnten()mit der Anweisung zum Entfernen des Balls aus der Welt: '' | ||
- | |||
- | Überprüfe, | ||
- | |||
- | **Hinweis: | ||
- | |||
- | |||
- | **Erklärung von '' | ||
- | |||
- | Das Spielfeld kann Objekte entfernen durch seine Methode '' | ||
- | |||
- | Wenn dein Ball tatsächlich verschwindet, | ||
- | Verschiebe die Methode '' | ||
- | Überprüfe erneut. | ||
- | |||
- | |||
- | |||
- | |||
- | ---- | ||
- | |||
- | [[..: | ||
- | |||
- | ---- | ||
- | |||
- | Alle Anleitungen in diesem Namensraum basieren auf den Materialien der Fachberatergruppe Informatik am RP Karlsruhe. | ||