Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //BALLONWELT
- package ballonwelteclipse;
- import processing.core.PApplet;
- import processing.core.PImage;
- public class BallonWelt extends PApplet {
- // verkettete Ballons steigen langsam schwingend in die Höhe
- // lade aus Moodle/Medien/Greenfoot/Objects die Bilder
- // balloon1,2,3 in den data-Ordner
- // Datenfelder:
- // PImage-Array ballons
- PImage[] ballons;
- // b vom Typ Ballon
- Ballon b;
- public void setup() {
- // setze Fenstergröße 400 x 600
- size(400, 600);
- // initialisiere Array ballons für 3 Bilder
- ballons = new PImage[3];
- // den ballons-Elementen werden die Bilder zugewiesen
- ballons[0] = loadImage("balloon1.png");
- ballons[1] = loadImage("balloon2.png");
- ballons[2] = loadImage("balloon3.png");
- // Ballon b wird am unteren Fensterrand erzeugt
- b = new Ballon(this, ballons[0], height);
- }
- // Methode draw
- public void draw() {
- // setze Hintergrundfarbe
- background(255, 255, 119);
- // b steigt
- b.steige();
- }
- // Methode mousePressed
- public void mousePressed() {
- // an b wird ein Ballon mit zufälliger Farbe angehängt
- b.haengeAn(new Ballon(ballons[(int) (random(0, 3))]));
- }
- }
- //BALLON
- package ballonwelteclipse;
- import processing.core.PApplet;
- import processing.core.PImage;
- public class Ballon {
- // Datenfelder:
- // x, y vom Typ float für die y-Koordinate
- float x, y;
- // img vom Typ PImage
- PImage img;
- // next vom Typ Ballon
- Ballon next;
- // p vom Typ PApplet
- static PApplet p;
- // der erste Konstruktor erhält Werte für y und img
- // x wird auf die Bildschirmmitte gesetzt.
- // Zunächst hat der Ballon noch keinen Nachfolger
- public Ballon(PApplet p, PImage img, float y) {
- this.y = y;
- this.img = img;
- x = p.width / 2;
- next = null;
- this.p = p;
- }
- // der zweiter Konstruktor erhält nur Werte für img.
- // Er ruft den ersten Konstruktor auf.
- public Ballon(PImage img) {
- this(p, img, 0);
- }
- // Methode steige
- void steige() {
- // die x-Koordinate schwingt um die Mittelsenkrechte.
- // Nutze dazu:
- // x = width/2 + 40*sin(radians(frameCount));
- x = p.width / 2 + 40 * p.sin(p.radians(p.frameCount));
- // die y-Koordinate verringert sich (z.B. um 0.8);
- y = y - 0.8f;
- // der Ballon wird gezeigt
- display();
- // die Methode ziehe wird aufgerufen
- ziehe();
- // wenn der letzte Ballon oben herausgeflogen ist,
- // kommt der erste wieder unten hoch.
- if (letzter().y < -letzter().img.height)
- y = p.height;
- }
- // Methode display
- void display() {
- // das Bild wird gezeigt.
- p.image(img, x, y);
- }
- // Methode ziehe
- void ziehe() {
- // falls ein Nachfolger vorhanden
- if (next != null) {
- // die y-Koordinate des Nachfolgers wird mit 10 Pixel
- // Zwischenraum unter den aktuellen Ballon gesetzt.
- next.y = y + img.height + 10;
- // die x-Koordinate des Nachfolgers schwankt um die x-Koordinate
- // des aktuellen Ballons, z.B:
- // next.x = x + 20*sin(radians(frameCount));
- next.x = x + 20 * p.sin(p.radians(p.frameCount));
- // der Nachfolger wird gezeigt
- next.display();
- // der Nachfolger wird aufgefordert, ebenfalls zu ziehen.
- next.ziehe();
- }
- }
- // Methode letzter gibt den letzten Ballon in der
- // Kette zurück
- Ballon letzter() {
- // wenn kein Nachfolger vorhanden, dann ist der
- // aktuelle Ballon der letzte
- if (next == null)
- return this;
- // ansonsten wird der Nachfolger gebeten, den
- // letzten zu liefern
- else
- return next.letzter();
- }
- // Methode haengeAn hängt einen Ballon unter den letzten.
- void haengeAn(Ballon b) {
- letzter().next = b;
- }
- }
Add Comment
Please, Sign In to add comment