Hi Leute,
da ich aktuell grad Abends immerwieder ein wenig Luft habe, um zu programmieren, würde ich gerne mal ein paar Tutorials in verschiedenen Richtungen machen. Gibts irgendwelche Vorschläge?
Mein erster Vorschlag:
Tilemaps:
- Parallaxscrolling, was ist das, wie setzt man es in GLB um
- Wie zeichne ich nur das, was ich auf dem Bildschirm sehe ( Performanceboost ^10 bei großen Maps)
- Kollision Spieler - Map
- Speichern/Laden von Tilemaps
Sehr interessantes Thema, welches mich selbst gerade beschäftigt. Eigentlich würde mich alles davon interessieren.
Gerne hätte ich mal eine Einschätzung von dir, ob meine Technik, eine Map zu zeichnen und zu laden schon gut ist oder ob man da noch vieles besser
machen könnte. Dazu habe ich mal eine Demo angefügt, wo man mit Link über ein Stückchen einer Zelda-Map laufen kann.
Die Tiles sind vom SNES Zelda genommen und der Link von der Gameboy Version ; )
Vielleicht mögest du dir das mal genauer anschauen.
[attachment deleted by admin]
Also für mich ist interessant:
2D: Bewegung im 2D --> z.B. hereinfliegende Objekte, Beschleunigung, Verzögerung, Flugbahnen
3D: "LOD" mit verschiedenen Modellen selbst gebaut
der richtige Einsatz von Nebel und Hintergrund
Collision richtig eingesetzt
@S.O.P.M.:
Hi, also ich muss sagen das sieht schon alles recht ordentlich aus. Wenn du allerdings größere Maps hast und diese dann mit deinen 5 Layern zeichen willst sagen die FPS gutenacht :)
Da darfst du wirklich nur das zeichnen, was auch sichtbar ist.
Das mit dem Dimdata ist eigentlich ne coole Sache, so hast du deine Map im Hardcode. Allerdings habe ich das so noch nicht gemacht, so das ich nicht sagen kann wie sich das auf dein Game auswirkt...
@WP:
War klar das du wieder in die Vollen gehst :D
Erwartest du etwas anderes von mir? *lol*
Ehrlich gesagt...
nein! :D
schön, dass Du so eine Frage stellst ;)
- Kollision Spieler - Map
- Speichern/Laden von Tilemaps
Eigentlich sind alle Themen interessant, aber für mich als Anänger wären diese Themen sehr wichtig.
regards
Antidote
Quote from: Schranz0rHi, also ich muss sagen das sieht schon alles recht ordentlich aus. Wenn du allerdings größere Maps hast und diese dann mit deinen 5 Layern zeichen willst sagen die FPS gutenacht
Da darfst du wirklich nur das zeichnen, was auch sichtbar ist.
Das mit dem Dimdata ist eigentlich ne coole Sache, so hast du deine Map im Hardcode. Allerdings habe ich das so noch nicht gemacht, so das ich nicht sagen kann wie sich das auf dein Game auswirkt...
Danke für deine Rückmeldung. Also in meiner Demo zeichne ich tatsächlich nur das, was auch sichtbar ist, jedoch genau 1 Reihe Tiles horizontal und vertikal mehr, als auf den Screen passt. Das mache ich deshalb, damit, wenn die erste Reihe Tiles vorne bzw. oben nicht vollständig im Screen ist, man hinten bzw. unten keinen Leerraum bekommt. Trotzdem habe ich eine CPU Auslastung zwischen 30-40% bei dieser Demo. Allerdings kann mein Grafikadapter OpenGL nicht vollständig, was auch ein Grund dafür sein könnte. Joa das mit den Map Daten direkt im Quellcode war nur für die Demo, in einem richtigen Spiel würde ich das auch lieber mit einer seperaten Datei beigeben.
@ S.O.P.M. :
Du machst aber einen großen Fehler bei deinem "Zeichnen was man sieht" !
Du zeichnest von 0 bis rechtes/unteres Tiles + ein Tile extra + Scrollfortschritt, so ist das falsch.
Du zeichnes irgendwann so viel, das die FPS in den Keller rutschen.
Wow, drei Sätze die mit "Du" anfangen :D, ist das ein inoffizieller Rekord?! xD
@ Antidote:
So ein Anfänger bist du nun wohl auch nimmer, bist doch auch schon ne Zeit lang dabei :)
Aber OK, ich mache als nächstes Speichern und Laden der Maps.
Dafür irgendwelche Wünsche?
Quote from: Schranz0rDu machst aber einen großen Fehler bei deinem "Zeichnen was man sieht" !
Du zeichnest von 0 bis rechtes/unteres Tiles + ein Tile extra + Scrollfortschritt, so ist das falsch.
Du zeichnes irgendwann so viel, das die FPS in den Keller rutschen.
Wenn du meinen Code richtig verstanden hast, dürftest du nicht zu dem Schluss kommen, ich würde immer bei 0 anfangen zu zeichnen. Ich zeichne immer so viele Kacheln, wie in den Bildschirm passen + eine Kachel extra. Nicht mehr und nicht weniger. Dabei spielt es keine Rolle, wie groß die Map ist. Auf dem Bildschirm fange ich natürlich bei 0 bzw. bei einem Minusbetrag, maximal der Größe einer Kachel - 1, an zu zeichnen. Schließlich möchte ich ja den aktuellen Kartenausschnitt im gesamten Fenster darstellen. Oder zeichnest du etwa nur die Kacheln, die neu in den Bildschirm hinein kommen und verschiebst den Rest nur? Wenn ja, denn hätte ich deinen Code nicht verstanden.
Naja seien wir ehrlich: die beste Variante wäre, gar nichts zu zeichnen, denn dann hätten wir die maximale Performance, wenn auch wir nichts dabei sehen xD
OK schau mir nochmal deinen Code an, auch wenn ich es jetzt so nicht ganz verstehe aber naja ;D
(du hast immer FOR 0 TO teile_die_man_sieht, läufst du jetzt aber weiter rechts zeichnest du immernoch von Teil 0 bis bildschirmende....)
Ja ich schiebe alles und zeichne auch nur das was auch wirklich sichtbar ist und wenns nur ein pixel sichtbar ist wird der Block schon gezeichnet :)
Man kann es wohl auch noch anders/eleganter lösen, aber ich bin selber kein Mathegenie, weshalb ich jetzt die einfache Methode gewält habe.
Nur nochmal zum Verständnis: Unter "Schieben" verstehe ich, nicht alle einzelnen Tiles zu zeichnen, sondern die zu verschiebenden Tiles in einen Buffer zu kopieren und 1 Pixel versetzt wieder auszugeben. Aber lass uns das besser alles vergessen, denn das lässt sich schon wie ich befürchte, schriftlich nicht entgültig klären. Deinen Code verstehe ich jedenfalls nicht, nachdem, was du über dein Prinzip sagst. Verbuchen wir das also unter "Egal".
Achsoooooo machst du das!
Du bescheisst das Array immer um die Scrollposition/tilesize + Teile pro Screen
Auch ne möglichkeit, wie machst du aber den schluss damit es kein Array out of bounds gibt? :/
Freut mich, dass du mein Prinzip verstanden hast :) Um nicht über die Array-Grenzen zu kommen, frage ich vor dem Zeichnen jedes Tiles einfach ab, ob ich noch innerhalb des Arrays bin. In einem richtigen Spiel dann wäre es natürlich sinnvoll, diese überflüssige Abfrage wegzulassen und wie bei dir dafür zu sorgen, dass das Ende der Map gar nicht erst ins Bild kommen kann.
Ich fände ein Kollision Spieler - map tutorial sehr interessant, über sowas würde ich mich wirklich freuen. :)
Mich würden Funktionen für Roguelikes interessieren, wie z.B. eine LOS-Routine.
Ausserdem wüsste ich gerne, wie man eine KI für Spiele wie "Empire" programmiert.
hallo Schranz0r,
für die meisten deiner voschläge sind hier im forum lösungen oder zumindest ansätze zu finden. viele die mit dem enwickeln von spielen anfangen (egal welche sprache) stolpern am anfang über die frage "wie organisiere ich das spiel?"... ladescreen -> mainsceen -> options -> ingame -> gameover -> highscore usw. wie wäre es dann einmal mit einem tutorial welches in richtung grundlagen abzielt?
Hi blastar,
das ist eine sehr gute Idee!
Wie immer führen auch hier viele Wege nach Rom. Ich werde mal meinen Lösungsansatz dazu schreiben.
Es dürfen auch gerne andere ihren Code dazu posten, Threads splitten ist kein Problem, also einfach hier rein!