Ergebnis 1 bis 19 von 19

Thema: Projektvorstellung: 2D-Map Editor für ein geplantes Spiel

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    @MuadDib:

    Der Editor WAR mal Tileorientiert und da war es so, dass man eine Textur, das Tileset, hatte, und dann kleine 32 x 32 Pixel große QUADS gesetzt hat, welche die Textur dieses Tilesets hatten. Das hatte sogar eine recht beachtliche Leistung, man könnte mehrere tausend QUADS setzen und alle Texturiert und mit Alpha-Blending. Damit hätte man so etwa 15 Layer mit jeweils 32 x 24 Tiles füllen können. (ca. 11000 QUADS) Und das sollte selbst für komplexe Karten ausreichen, da ja nicht mehr las 32 x 24 Tiles pro Bildschirm angezeigt werden.

    Das wurde mir später aber zu langweilig, weil alles so gleich aussieht und eben durch Raster begrenzet ist. Ich wollte alles etwas freier gestalten, freie Größen, Farben und Position auf der Karte. Daher hab ich das komplette System verworfen und nun Unterteilt in "Polygon" und "Objekt". So nenne ich meine 2 Bestandteile. Dabei arbeiten "Polygone" wie in 3D-Programmen, man setzt Primitive (QUADS) und spannt eine Textur darauf. Man kann die Vertices verformen und die Textur skalieren, versetzen usw. Diese "Polygone" werden eingesetzt um den Boden zu erstellen, das Wasser, Wände. Eben Dinge die eine gekachelte Textur haben. Daher ist die Textur ein einzelnes TGA-File, damit es kachelbar ist.
    Der zweite Typ heißt schlicht "Objekt" und man setzt wieder ein QUAD, diesmal passt sich die Textur aber dem Objekt an. Man wählt sich also ein Teil der Textur aus, welches dargestellt wird, und beim verformen und Vergrößern des Objekts wird die Textur mit skaliert. Dies bietet die Möglichkeit, Bäume, Sträucher, Büsche, Blumen und allerlei Gegenstände in verschiedenen Größe, Formen und Farben darzustellen. Daher verwende ich dort eine Art "Tileset" wo die Objekte drauf sind, also eine TGA-Datei. Man wählt dann beim Platzieren des Objekts genau den Bereich aus, der auf die Ränder des Objekts gespannt wird. Die Ränder kann man aber auch nachher noch on-the-fly immer ändern. Das bietet auch die Möglichkeit, Objekte abzuschneiden und nur teils darzustellen.

    (oben im Bild: Ein Polygon ist also etwa der Sandboden und die Hauswand, ein Objekt ist das Boot, das Netz, der Hammer, die Palme usw.)

    Warum ich diese Arten trenne? Stimmt schon, im Endeffekt könnte jedes "Objekt" ein "Polygon" ersetzen und ein "Polygon" auch ein "Objekt", aber es würde mehr Arbeit machen. Auch mit einem "Objekt" kann man mittels den Einstellungen für Texturskalierung und Versatz einen gekachelten Boden erstellen. Wenn man sich dann aber überlegt, den Boden ein paar Pixel größer zu ziehen, zieht man die Textur mit, denn bei "Objekten" passt sich diese ja der Form an. Also nimmt man lieber "Polygone" und kann bequem die Größe und Position ändern, die Textur bleibt unbeeinflusst. (Man könnte aber auch bei Polygonen genau ein bestimmten Teil der Textur darstellen, mittesl Skalierung, Winkel und Versatz ließe sich der Teil genau rausschneiden. Aber ist eben viel umständlicher als mit einem "Objekt"). Von daher gibt es 2 Arten von Typen die man setzen kann und mit denen man die Karte gestaltet.
    Später noch geplant ist auch, dass man "Objekten" Ereignisse zuweisen kann oder Routen und Animationen geben kann. Wie komplex das im Endeffekt noch wird weiß ich aber jetzt noch nicht genau.

    Die Texturen und Tilesets werden übrigens alle zentral über die Texturbox rechts eingeladen und ausgewählt. Das, was da im Moment ein schwarzes Quadrat ist, ist in Wirklichkeit das Vorschaubild für das Tileset mit dem Boot, den Palmen, dem Hammer usw. Nur, der Ausschnitt der für das Vorschaufenster verwendet wird, ist zufälliger Weise leer. Das muss ich noch überarbeiten.

    Zitat Zitat
    Button-Kit = Widget Toolkit, mit dem du deine GUI malst? Hab das nicht ganz verstanden, schätze aber, dass du irgendeine Ebene höher arbeiten wirst, als auf reiner WinAPI Ebene... ausser du bist Masochist.
    Öhm, so ganz versteh ich das nicht, aber ich beschreibe mal wie ich meine GUI bastle. Also ich male nicht selbst mit Linien und Primitiven die Schaltflächen, was für ein Aufwand.^^
    Also ich habe eine Klasse Fenster von der ich andere Klassen erben lasse. Diese Klasse Fenster ist für Hauptfenster. Die erbenden Klassen sind für Textboxen, Radiobuttons, Checkboxen, Trackbars, Listviews usw. Ich hab dann also Klassen von denen ich Objekte erstelle und mit dieser Erstellung wird eine solche Schaltfläche erzeugt. Und dies eben über die bekannte CreateWindowEx() Funktion der WinAPI. Die Messages der Buttons werden dann in einer zentralen Windows-Prozedur ausgewertet, insofern ich dem Fensterobjekt keine andere Callback-Prozedur zugeordnet habe.

    Geändert von Ynnus (20.10.2005 um 18:13 Uhr)

  2. #2
    Zitat Zitat von Ynnus
    @MuadDib:

    Der Editor WAR mal Tileorientiert und da war es so, dass man eine Textur, das Tileset, hatte, und dann kleine 32 x 32 Pixel große QUADS gesetzt hat, welche die Textur dieses Tilesets hatten. Das hatte sogar eine recht beachtliche Leistung, man könnte mehrere tausend QUADS setzen und alle Texturiert und mit Alpha-Blending. Damit hätte man so etwa 15 Layer mit jeweils 32 x 24 Tiles füllen können. (ca. 11000 QUADS) Und das sollte selbst für komplexe Karten ausreichen, da ja nicht mehr las 32 x 24 Tiles pro Bildschirm angezeigt werden.

    Das wurde mir später aber zu langweilig, weil alles so gleich aussieht und eben durch Raster begrenzet ist. Ich wollte alles etwas freier gestalten, freie Größen, Farben und Position auf der Karte. Daher hab ich das komplette System verworfen und nun Unterteilt in "Polygon" und "Objekt"

    [...]
    Alles klar. Das erklärt auch deinen Punkt mit Laden und Speichern, denn Kacheln speichern/laden sollte ja nun nicht wirklich ein Problem darstellen. Sehr interessanter Ansatz und für einen interaktiven Editor eigentlich ganz schön advanced, vor allem, wenn du dir dein Window Toolkit (mit allen Interaktionen) ja auch noch selbst schreibst Wie lange arbeitest du schon an der nicht langweiligen Variante?

    Zitat Zitat
    Öhm, so ganz versteh ich das nicht,
    Gut möglich, ich war etwas kurz angebunden und habe dementsprechend unsortiert meine Gedanken losgelassen...

    Zitat Zitat
    aber ich beschreibe mal wie ich meine GUI bastle. Also ich male nicht selbst mit Linien und Primitiven die Schaltflächen, was für ein Aufwand.^^
    Schon klar, unter "GUI malen" versteh ich generell das Zusammenbasteln, weils ja mit den richtigen Bibliotheken und/oder Editoren ja nichts anderes ist

    Zitat Zitat
    Also ich habe eine Klasse Fenster von der ich andere Klassen erben lasse. Diese Klasse Fenster ist für Hauptfenster. Die erbenden Klassen sind für Textboxen, Radiobuttons, Checkboxen, Trackbars, Listviews usw. Ich hab dann also Klassen von denen ich Objekte erstelle und mit dieser Erstellung wird eine solche Schaltfläche erzeugt. Und dies eben über die bekannte CreateWindowEx() Funktion der WinAPI. Die Messages der Buttons werden dann in einer zentralen Windows-Prozedur ausgewertet, insofern ich dem Fensterobjekt keine andere Callback-Prozedur zugeordnet habe.
    Genau auf das wollte ich hinaus. Du hast dir also eine eigene Bibliothek geschrieben, in der du objektorientiert die verschiedenen WinAPI Teile einfach erstellen kannst. Alles andere wär ja idiotisch, wenn man bedenkt, dass ein WinAPI Code, der Fenster und einen Button anzeigt ja schon 3-4 Seiten Quellcode hat.

    Eigentlich ist das der Schritt, für den ich immer zu faul war, das ja schon sehr schöne Widget Toolkits gibt, die einem diese Arbeit abnehmen (GTK beispielsweise...).

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •