Das man mit Pfaden in GameMaker tolle Sachen machen kann, wurde bereits in einem anderen Tutorial gezeigt. Doch nicht für jede Bewegung braucht es vorgegebene Pfade. Kreisbewegungen lassen sich einfach per Code lösen.
Im aktuellen Testprojekt für einen anderen Artikel kommt es sehr oft vor. Objekte, die man einsammeln kann, bewegen sich in einer Kreisbahn. Etwa so:
Das Spiel dazu kannst Du Dir auf itch.io oder GXC anschauen. Und ja, das Spiel ist voll mit solchen Objekten. Sogar einer der späteren Gegner bewegt sich auf einer Kreisbahn.
Dabei gibt es zwei Herausforderungen:
- Die Kreisbahn per Code erzeugen.
- Die Bewegung so auszuführen, dass sich nicht alle gleich drehen.
Erfahrenere Entwickler ahnen bereits, dass Punkt 2 (mal wieder) etwas mit Zufall zu tun haben könnte. Legen wir los.
Create-Event
1 2 | chevron = floor(random_range(1, 90))*4; radius = 1; |
Das war es bereits. Wir legen zunächst einen Winkel für den Start fest. Hier kommt ein Zufallswert ins Spiel. Warum er durch vier teilbar ist, siehst Du gleich im Step-Event. Außerdem definieren wir einen Radius. Klar ist: Je größer die Zahl, umso größer der Kreis.
Step-Event
1 2 3 4 | chevron += 4; if (chevron>360){chevron-=360}; x = x+cos(degtorad(chevron))*radius; y = y+sin(degtorad(chevron))*radius; |
Die Drehgeschwindigkeit beträgt vier Schritte pro Step. Nach 90 Steps haben wir eine komplette Umdrehung. Bei 60 Steps pro Sekunde dauert die Umdrehung somit 1,5 Sekunden. Ist der Winkel größer 360°C, setzen wir ihn wieder zurück. Natürlich nicht auf 0, schließlich starten wir nicht damit, sondern mit -=360, um auf den Ausgangswert zu kommen.
Die Position für x und y werden mit cos und sin berechnet. Außerdem brauchen wir die GM-Funktion degtorad, um die Gradzahl in Bogenmaß umzuwandeln.
Draw-Event
1 2 | draw_set_alpha(1); draw_sprite(sHearth, -1, x, y); |
Anschließend wird es gezeichnet. Fertig.