Hey, ich arbeite zurzeit an nem Platformer á la Super Mario. Generell funzt die Engine okay, mehrere Macken gibt es aber noch.
Zur generellen Funktionsweise:
Die Bewegung basiert auf Beschleunigung und Bremsung damit alles relativ fließend wirkt. Pfeiltaste drücken steigert die Speed um 0.5, dem entgegen wirkt eine Bremsung um 0.25 - funktioniert eher schön. Das Problem ist nun, dass alle meine Versuche die Hauptfigur Slopes hochlaufen zu lassen gescheitert sind.
Der zugehörige Code sieht so aus (Step-Event des Spielers):
Alles anzeigen
Wäre cool wenn jemand wenigstens nen Lösungsansatz parat hätte.
Zwei weitere Macken, die ich noch nicht gelöst habe sind btw., dass der Character an Ecken schonmal hängen bleibt (wenn man mit der eigenen Ecke exakt die Ecke einer Plattform trifft) und, dass der Spieler von vertikaler Bewegung manchmal scheinbar grundlos eine feste horizontale Bewegung von 0.5 kriegt. Letzteres ist für mich bislang unerklärlich, ersteres dürfte meiner Vermutung nach automatisch gelöst werden sobald das hoch laufen an Slopes integriert ist.
Also, wäre für Hilfe dankbar.
Edit: Nur damit Klarheit herrscht: Mir ist klar, dass dieser Code nichts enthält um den Chara Slopes hochlaufen zu lassen. Das ist bloß die beste einigermaßen solide Version, die ich soweit gebastelt habe.
Zur generellen Funktionsweise:
Die Bewegung basiert auf Beschleunigung und Bremsung damit alles relativ fließend wirkt. Pfeiltaste drücken steigert die Speed um 0.5, dem entgegen wirkt eine Bremsung um 0.25 - funktioniert eher schön. Das Problem ist nun, dass alle meine Versuche die Hauptfigur Slopes hochlaufen zu lassen gescheitert sind.
Der zugehörige Code sieht so aus (Step-Event des Spielers):
GML-Quellcode
- // Horizontale Bewegung
- if keyboard_check(vk_shift)
- { // Sprint
- if keyboard_check(vk_left) && place_free(x-1,y) && hspeed > -maxrun
- {
- hspeed -= 0.5
- }
- else
- if keyboard_check(vk_left) && place_free(x-1,y)
- {
- hspeed -= 0.25
- }
- if keyboard_check(vk_right) && place_free(x+1,y) && hspeed < maxrun
- {
- hspeed += 0.5
- }
- else
- if keyboard_check(vk_right) && place_free(x+1,y)
- {
- hspeed += 0.25
- }
- }
- else
- { // Langsames Laufen
- if keyboard_check(vk_left) && place_free(x-1,y) && hspeed > -maxwalk
- {
- hspeed -= 0.5
- }
- else
- if keyboard_check(vk_left) && place_free(x-1,y)
- {
- hspeed -= 0.25
- }
- if keyboard_check(vk_right) && place_free(x+1,y) && hspeed < maxwalk
- {
- hspeed += 0.5
- }
- else
- if keyboard_check(vk_right) && place_free(x+1,y)
- {
- hspeed += 0.25
- }
- }
- // Horizontale Bremsung
- if hspeed > 0 then hspeed -= 0.25
- if hspeed < 0 then hspeed += 0.25
- if hspeed > maxwalk && not keyboard_check(vk_shift) then hspeed -= 0.5
- if hspeed < -maxwalk && not keyboard_check(vk_shift) then hspeed += 0.5
- // Wandkollision
- if vspeed > 0 && not place_free(x,y+vspeed*collsec)
- {
- vspeed = 0
- move_contact_solid(270,vspeed*collsec)
- jumpable = jumpmax
- }
- if vspeed < 0 && not place_free(x,y+vspeed*collsec)
- {
- vspeed = 0
- move_contact_solid(90,-vspeed*collsec)
- jumpable = 0
- }
- if hspeed > 0 && not place_free(x+hspeed*collsec,y)
- {
- hspeed = 0
- move_contact_solid(0,hspeed*collsec)
- }
- if hspeed < 0 && not place_free(x+hspeed*collsec,y)
- {
- hspeed = 0
- move_contact_solid(180,-hspeed*collsec)
- }
Wäre cool wenn jemand wenigstens nen Lösungsansatz parat hätte.
Zwei weitere Macken, die ich noch nicht gelöst habe sind btw., dass der Character an Ecken schonmal hängen bleibt (wenn man mit der eigenen Ecke exakt die Ecke einer Plattform trifft) und, dass der Spieler von vertikaler Bewegung manchmal scheinbar grundlos eine feste horizontale Bewegung von 0.5 kriegt. Letzteres ist für mich bislang unerklärlich, ersteres dürfte meiner Vermutung nach automatisch gelöst werden sobald das hoch laufen an Slopes integriert ist.
Also, wäre für Hilfe dankbar.
Edit: Nur damit Klarheit herrscht: Mir ist klar, dass dieser Code nichts enthält um den Chara Slopes hochlaufen zu lassen. Das ist bloß die beste einigermaßen solide Version, die ich soweit gebastelt habe.