Zwischen Maps wechseln - Ansätze?
Übersicht

![]() |
M0rgensternBetreff: Zwischen Maps wechseln - Ansätze? |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo Leute,
Ich steh mal wieder vor einem verdammt blöden Problem. Undzwar: Bei meinem Spiel besteht ein ein Level aus mehreren Karten. Bei diesen Karten ist es so: Man soll von einer Karten durch ein Portal o.ä. zu einer anderen Karten kommen. Jede Karten ist eine normale, kleine Tilemap. Mein Problem ist jetzt: Ich habe zwar einen Ansatz, wie sich das umsetzen lassen würde, aber ich glaube der Ansatz ist nicht gut. Jetzt wollte ich bei euch mal nachfragen, was ihr von dem Ansatz haltet und wie ihr es machen würdet. Hier sein erstmal die Klasse für ein Level und die Übergänge zwischen den Karten: BlitzMax: [AUSKLAPPEN] Type TWorldPart So würde ich das momentan umsetzten. Nur habe ich das Gefühl, dass das irgendwie unnötig kompliziert ist. Was meint ihr? Wie würdet ihr das machen? Wäre super, wenn mir jemand ein paar Tipps geben würde. Lg, M0rgenstern |
||
PhillipK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Unnötig kompliziert? Vielleicht.
Würde ich es einfacher machen? Ja! Solltest du es ändern? Nein! Du hast dir doch die mühe schon gemacht - der ansatz sieht (vom groben drüberlesen) ganz ordentlich aus und bietet enorm spielraum, um hinterher noch was zu verfeinern. Mein ansatz wäre simpel: Bei Tilemaps arbeite ich immer mit "aktionsfeldern", sprich ein weiterer array der über die map gelegt werden kann. Bei jedem schritt wird das tile unter dem spieler und die zugehörige aktion zusammengefrickelt die aktion evtl ausgeführt. So eine aktion kann dann zb mit ChangeMap(obj:Object) hinterlegt werden, wobei obj ein Dummytype ist, was beliebig interpretiert werden kann - oder einfach ein string. dh eine kachel kann den Mapchange-wert "12|18" haben (beispiel - vielleicht als koordinaten zu interpretieren, typ ist string) und ChangeMap wertet das dann aus ![]() |
||
Lador |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Also ich habs bei Iliran so gemacht, dass ich in einer separaten Datei alle "Verbindungen" zwischen Maps gespeichert habe. Eine Instanz des TVerbindungs-Types beinhaltet grob Position, Breite und Länge der Stellen und die Namen der beiden Maps. Während des Hauptprogramms wird dann einfach abgefragt, ob die Spielerposition und seine aktuelle Map mit derer der Verbindung übereinstimmt und dann notfalls teleportiert. Sehr simpel also, sehr wenig Aufwand und auch wenig Code. Den Übergang kann man auch noch mit netten Effekten verzieren, damit es nicht so sprunghaft wirkt.
Ehrlichgesagt habe ich mir deinen Code nicht angesehen, da er mir gleich zu lange war. ^^ Mein Beispiel ist in meinem Spiel auf den Übergang zwischen der (einzigen) großen Outdoor-Map, und den Indoor-Maps ausgelegt, würde sich aber sicher auch auf deine Situation übertragen lassen. Hast du es denn schon einmal ausprobiert? Für die Leser mit wenig Zeit könntest du auch kurz beschreiben, was dein Code macht. MFG Lador |
||
Mein aktuelles Projekt:
2D-Rollenspiel "Iliran" Screenshot | Worklog Fortschritt: ca. 70% |
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke euch beiden.
Also, was mein Code macht: Ein Level hat eine Liste mit TileMaps und eine Liste mit Übergängen. Jeder Übergang hat nochmal ein Bild, eine Ziel-Tilemap und eine Zielposition. Wenn der Spieler auf dem Tile steht, auf dem auch der Übergang steht, dann wird er an die entsprechende Position auf der anderen Tilemap teleportiert. @Lador: Getestet habe ich es noch nicht, da ich den Mapeditor grade erst schreibe, was sich ohne MaxGui irgendwie als extrem unschön erweist. Aber mit Maxgui habe ich irgendwie keine Tastaturabfragen richtig umsetzen können, die ich aber brauchte um die Kamera zu bewegen... Die Übergänge, die du ansprichst machen mir am meisten Kopfschmerzen... Aber das werde ich wahrscheinlich mit GameStates umsetzen... Lg, M0rgenstern |
||
Lador |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Was genau meinst du mit GameStates? Ich hab einfach einen "schwarzen Bildschirm" (also entweder ein Rechteck so groß wie der Bildschirm oder eine Bilddatei) mit Alpha-Blending (Transparenz) drüber gezeichnet, also den Wert von 0 bis 1 flüssig gesteigert. Wenn der Wert bei 1 ist, dann wieder flüssig zu 0 sinken lassen.
Schön finde ich aber auch, wenn man einen Screenshot der aktuellen Map macht und dann langsam mit Alpha-Blending in die zu wechselnde Map übergehen lässt. Ist aber etwas schwieriger. Sind halt grafische Effekte, meines Wissens nach zu Beginn eines Projekts eher noch Kleinigkeiten. Aber ich glaube jeder, der alles früh genug plant, ist ein guter Programmierer (nicht so wie ich ^^). MFG Lador |
||
Mein aktuelles Projekt:
2D-Rollenspiel "Iliran" Screenshot | Worklog Fortschritt: ca. 70% |
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
Naja.
Ich arbeite im kompletten Spiel mit Gamestates. (Gabs hier im Forum sogar ein Modul dazu, das ich benutze.) Ein Gamestate ist in dem Fall einfach ein Zustand in welchem sich das Spiel befinden kann. Jeder Gamestate hat eine Load, eine Execute und eine End Methode. Die load methode wird aufgerufen, wenn zu diesem Gamestate gewechselt wird, die Execute methode wird aufgerufen, solange der Gamestate der aktuell genutzte ist und die End Methode halt wenn der Gamestate ausgeschaltet und durch einen anderen Ersetzt wird. Ich hätte dann einen Gamestate MapChange oder so geschrieben, der in der Load Methode die aktuelle Karte und die nächste Karte bekommt und in seiner Execute Methode halt überblendet. Wenn er mit überblenden fertig ist, dann gehe ich wieder in den Gamestate der fürs Spiel selbst verantwortlich ist. Lg, M0rgenstern (Ich plane bei diesem Projekt gerne sehr viel im Voraus, weil ich nicht will, dass es wieder wegen inflexibilität oder schlechter Planung verworfen wird) |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group