Hallo Sacaldur,
vielen Dank für deine Tipps.
Da ich schon frühere einmal einen Prototypen entworfen hatte, habe ich die meisten Bedenken/Tipps deinerseits schon implementiert, weil ich auf genau dieselben Dinge gestoßen bin. Ein paar hatte ich aber noch nicht bedacht und werde diese in meine Überlegungen aufnehmen.
Nach ein wenig coden bin ich nun zu dem Teil der Physik/Schwerkraft gekommen. Dieser hat mir immer am meisten Probleme bereitet, weil es hier wirklich schon etwas kniffliger wird.
Ich hatte beispielsweise den Sprung damals so umgesetzt:
Der Spieler hat eine boolean-Variable mit dem Namen 'jump' welche definiert, ob er sich momentan in der Sprungphase ist. Des weiteren hat er eine "currentJump" und eine "maxJump"-Variable, die angibt, wie hoch er springen kann und wie weit er bereits gesprungen ist. Durch einen gewissen "jumpSpeed" wird definiert, wie hoch er pro Berechnung sich nach oben bewegt.
Bei betätigen der Sprung-Taste wird die jump-Variable auf true gesetzt und der Spieler hebt um seinen "jumpSpeed" vom Boden ab. Dieser Wert wird in "currentJump" gespeichert. Bei jedem Aufruf des Berechnungs-Threads bewegt er sich weiter nach oben und sein "currentJump" erhöht sich. Das ganze geht solange, bis er seinen "maxJump" erreicht hat. Danach wird "currentJump" wieder auf 0 gesetzt und "jump" auf false. Somit fällt er ganz normal runter.
Ich habe das damals so implementiert, fand es aber nie schön und wollte es eigentlich anders lösen. Mir fällt allerdings kein gescheiter Lösungsansatz ein.
Außerdem habe ich noch einen Punkt, der mir Bauchschmerzen bereitet:
Ich möchte, dass meine Blöcke fallen. Das Problem ist, dass sie sich in dieser Matrix befinden (array[x][y]). Somit kann ich meine Blöcke nur ganze Schritte nach unten bewegen, was sehr hässlich aussieht.
Ich habe mich damals von Minecraft inspirieren lassen:
Hier ist es so, dass ein fallender Block eine Animationsphase hat, in der er einen Block nach unten fällt.
Erst wenn er an der Position des nächsten Blocks angekommen ist, wird berechnet und der Rest über ihm fällt runter.
Soweit keine schlechte Idee, allerdings sieht das in einem
2D-Spiel nicht so klasse aus, wenn der Spieler in der Luft steht, wenn der Block (auf dem er steht) fällt und er danach (sobald der Block eine Ebene tiefer angekommen ist) auf einmal mit dem Fallen beginnt. Ich musste also umdenken und habe das so implementiert, dass der Player sich dann AUCH in einer Animationsphase befindet und somit auch sich mit nach unten verschiebt. Allerdings traten dadurch eine ganze Menge Probleme auf, die mir dann irgendwann den Spaß geraubt haben, weil es mir zu hässlich wurde.
Jemand eine Idee, wie man DAS gut umsetzt?
Ich hoffe, ich konnte das einigermaßen erklären. Echt schwierig, dass nur mit Worten zu umschreiben.
@Architekt: Auch dir ein herzliches Dankeschön für die Links.