Hilfe bei p5js - Processing JavaScript

Gundal

Spieler
4 Jun 2020
375
Moin,
Im Informatik-Unterricht sollten wir ein kleines Spiel mit Javascript bzw. p5js programmieren. Mein Game ist soweit fertig. Bis auf einen nervigen Bug. Da ich bisher noch keine Lösung gefunden habe, dachte ich, frage ich einfach mal euch.
Zuerst mal der Link zu meinem Code: https://editor.p5js.org/Gundal/sketches/zwzx47Mxz
Das Problem, was besteht ist folgendes: Wenn ich mit der Maus danebenklicke, wird die Funktion fail() aufgerufen. Jedoch wird diese erst korrekt/vollständig ausgeführt, wenn man ein 2. Mal daneben klickt. Vorher geht er an einen Punkt und bewegt sich nicht. An der Funktion fail() kann es nicht liegen, da diese Korrekt ausgeführt wird, wenn der Komet den Boden berührt.
Falls mir jemand weiter helfen kann, freue ich mich sehr auf eure Beiträge :)
Liebe Grüße, Gundal
Ps: Die penible Kommentierung ist von meinem Lehrer genau so erwünscht :wacko:
 
Ich hab mir das ganze mal kurz angeschaut, ich hab mit Javascript noch nicht viel zu tun gehabt, daher kann ich dir leider nicht erklären, warum der Fehler auftritt. Was mir allerdings aufgefallen ist:
die fail() Funktion wird beim ersten mal klicken direkt komplett ausgeführt (man kann hier z.b. einfach mal print("test"); am Ende der Funktion einfügen, dann sieht man das)
Das Ändern der Textfarbe funktioniert auch, da sich die Farbe der Highscore und Punkte anzeigen oben ändert und auch der Highscore wird geupdatet.
Vermutlich geht also irgendwas beim anzeigen der Texte/übermalen des Hintergrunds schief, falls da jemand ne Erklärung hat, würds mich auch interessieren.

Um dein Problem aber erstmal zu lösen kannst du einfach Zeile 36 von "fail();" zu "yPos = 508;" ändern, damit wird dann die fail() Funktion aus draw() aufgerufen und dieser Aufruf funktioniert ja.
 
  • Gefällt mir
Wertungen: Gundal
Sieh dir mal diesen Hinweis aus den JavaDocs der p5.js an, die im Header der index.html an den Browser übergeben wird.
Natürlich nur ein kleiner Teil der über 62000 Zeilen Code.

Code:
* Called directly after setup(), the draw() function continuously executes
* the lines of code contained inside its block until the program is stopped
* or noLoop() is called. Note if noLoop() is called in setup(), draw() will
* still be executed once before stopping. draw() is called automatically and
* should never be called explicitly.

Entsprechend wird die fail-Funktion sofort von der draw-Funktion überschrieben.

Der Aufruf der fail-Funktion und der von offrock genannte Workaround wird beim Erreichen des Bodens funktionieren, da die Funktion am Ende der draw-Funktion aufgerufen wird.

Alternativ könntest du zB. eine Variable erstellen (zb. "failed) und diese auf "true" setzen, wenn man daneben geklickt hat.
In der draw-Funktion prüfst du nun am Ende diese Variable und führst entsprechend die fail-Funktion aus. Das kannst du auch in die bereits vorhandene Prüfung einbauen:

if ((yPos >=508) || (failed == true)){ fail() }
 
Zuletzt bearbeitet:
  • Gefällt mir
Wertungen: Gundal und offrock1

Benutzer, die dieses Thema gerade lesen

ONLINE 13 Spieler