Eat&Run Game --> Wie kann ich machen das ein Objekt zuerst eine random Position bekommt und dann wenn es gefressen wird gelöscht und neu platziert?


16.10.2022, 21:23

Beim 2Bild habe ich schon etwas korrigiert ;) Jetzt ist das Hauptproblem das die Banane ständig position wechselt...

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Für den Startzustand des Spiels solltest du die Zufallskoordinaten in setup / außerhalb von draw berechnen. Die Variablen für die Koordinaten müssen global sein.

int xb, yb;

void setup() {
  // set coordinates ...
}

In draw wiederum müsstest du jedesmal prüfen, ob Affe und Banane miteinander kollidieren (sich beide Rechtecke also schneiden). Erst wenn dem der Fall ist, setzt du die Variablen neu.

if (/* collision ... */) {
  // reset xb, yb ...
}

Bedenke übrigens, dass die Koordinaten nach Standardverhalten auf der linken oberen Ecke eines Bilds liegen. Sollte also eine der Zufallskoordinaten den Wert 699 ergeben, würde das Bild bereits über die Zeichenfläche hinausgehen.

Für die Kollisionsprüfung würde ich eine extra Funktion schreiben, die als Ergebnis einen boolschen Wert zurückgibt. Als Hilfe für die Logikimplementation empfehle ich das Anfertigen von Skizzen. Im Grunde brauchst du die Koordinaten und Dimensionen beider Bilder. Diese Werte müssen miteinander verglichen werden.

Koebi10 
Fragesteller
 16.10.2022, 22:20

Danke Dir für dein schnelle Antwort.
Aber weisst du es sind zwei Images, das heisst ich wollte es so machen das wenn die Differenz der beiden Objekte <50 ist dann wird die Banane schon resetet (muss nicht 100%genau sein) Funktioniert jetzt :)

Weisst du wie ich einen Bananen-Counter oben links als Zahl einfügen könnte?

Freundliche Grüsse und Danke

0
regex9  16.10.2022, 22:48
@Koebi10

Zum Zeichnen gibt es die text-Funktion. Den Zustand kannst du dir einmal wieder in einer globalen Variable speichern.

text("Score: " + counter, 10, 10); 
1

Zum einen die x und y pos auf die Zufallswerte setzen.

Zum anderen prüfen ob sich die Objekte überschneiden und dann die Werte neu berechnen und setzen.

Fals sie sich immer noch überlappen weiter neu berechnen