Seite 1 von 1

Map Editor

Verfasst: 15.08.2007 09:36
von Rubiko
Hey Leute,

ich hab eine Frage bzgl. Map Editoren allgemein...

http://www.scalari.net/temp/mapeditor.gif

So kenne ich sie, allerdings...
der gesamte Zeichenbereich mit den Tiles, um was genau handelt es sich da?
Wie ließe sich sowas nachprogrammieren?

Ich bin zwar so nicht der Freak... aber von WinApi (was man dazu wohl braucht) hab ich noch weniger Ahnung.

Alles was ich weiß ist, man muss wohl eine eigene Fensterklasse programmieren (oder sowas in der Art)

Grüße,
Rubiko

Verfasst: 15.08.2007 12:17
von Xaby
Kannst du deine Frage so stellen, dass ich auch verstehe, was du meinst?

Kleiner Tipp: Gib mal in die Suche folgendes ein: FolkisA

:mrgreen: Egal, was du machen willst, du kannst es mit den Gadgets machen. WinAPI direkt brauchst du nicht wirklich.

http://www.purebasic.fr/german/viewtopi ... ht=folkisa

http://www.purebasic.fr/german/viewtopi ... ht=folkisa

Du nimmst ein ScrollAreaGaget und legst da ein ImageGadget drauf. Mit WindowMouseX() und WindowMouseY() kannst du ermitteln, wo deine Maus sich befindet.

Mit den Get... Befehlen aus der Gadgetreihe kannst du ermitteln, wie weit du gescrollt hast in deinem ScrollAreaGadget

Wenn du das Klicken abfragen willst, ist das ein Virtual KeyCode ...

oder machst einen WindowedScreen ...

So, nun überleg dir noch mal genau, was du eigentlich gemeint hast :D :allright:

Verfasst: 15.08.2007 12:23
von Rubiko
Jup.. tut mir Leid ist evtl. etwas blöd erklährt...

Ihr seht doch einfach diesen ganzen Zeichenbereich auf dem Screenshot unter der ScrollArea, oder?
Was ist das ganze für ein Gadget? Ist das wirklich nur ein einziges ImageGadget, so wie Folker es sagte?
Kann man auf ein ImageGadget einfach so weitere ImageGadgets zeichnen (in dem fall Tiles?) ich denke nämlich nicht, oder?

Verfasst: 15.08.2007 12:27
von DarkDragon
Schonmal blöd wenn du mit Images arbeitest. Bei 32x32x3 Tiles ist es schon langsam. Ich hab bereits 3 oder 4 Mapeditoren solcher art gemacht und muss sagen, dass es mit Sprites eindeutig schneller geht.

Verfasst: 15.08.2007 12:37
von Xaby
Es gibt halt mehrere Möglichkeiten.

Wenn du dich für ein ImageGadget entscheidest, dann hast du auch nur ein einziges. Also keine weiteren ImageGadgets in dem ImageGadget.

Du zeichnest die Tiles auf dein #Image und änderst mit
SetGadgetState() dann das Bild.

Oder du nimmst eben einen OpenScreen() in einem Fenster und arbeitest mit Sprites.

Bei einem Editor, wo du keine ständig ändernden Dinge hast, spielt die Geschwindigkeit keine Rolle.

Die Frage ist am Ende, wie groß deine gesamte Map werden soll.

Willst du sie auf ein #Image packen, dann wird es ab 3.000 x 3.000 Pixeln schon hier und da etwas kritisch. Willst du immer nur einen Teil deiner gesamten Map anzeigen ...

Hast du ein Array und projetierst dann immer den aktuellen Bereich auf deinen Screen z.B.

Siehe Links :allright:

Verfasst: 15.08.2007 13:08
von Zaphod
Mal ein paar grundlegende Dinge. Klar hast du dann nur ein einziges Image auf das du immer erst deinen Bildausschnitt zeichnest. Das hat einen einfachen Grund: Doublebuffering. Wenn du nicht alles schon vor der anzeige gezeichnet hast, sondern "live" in den sichtbaren bereich Zeichnest, dann führt dass dazu, dass der nutzer mitbekommt wie dein Level erst zusammengesetzt wird. Das äußert sich in heftigem Flackern und u.U. einigen sehr bizarren optischen Phänomenen. In dein Editor Image zeichnest du ganz einfach mit 2D Drawing befehlen. Du kannst das ganze aber auch komplett ohne image Gadget machen, in dem du mit 2D Drawing erst das image zusammensetzt und es immer wenn es nötig ist mit 2D Drawing auf das Fenster zeichnest.

Du zeichnest natürlich auch immer nur grade soviel vom Level wie du darstellen willst, sonst kannst du dir auch das Tilemapping sparen. Das ist ja auch kein großes Problem, alles was man dazu braucht ist Grundschulmathematik.

Verfasst: 15.08.2007 13:26
von Rubiko
Also einfach mit CreateImage und darauf dann meine Map zeichnen?
Wenn ich Recht habe, dann denkt man manchmal einfach nicht einfach genug...

Verfasst: 15.08.2007 13:31
von Zaphod
Genau, mit CreateImage.

Solange sich an der Fenstergröße nichts ändert, brauchst du dafür auch nicht für jedes mal zeichnen erst ein neues Image erstellen sondern machst es einfach am Anfang jedes Durchlaufes mit Box sauber und verwendest es dann wieder. Wird die Fenstergröße verändert, dann zerstörst du das alte image, erstellst ein neues in der nötigen Größe, berechnest wieviele Tiles darauf kommen für diese Größe und machst ansonsten weiter wie zuvor.

Alles eigentlich ganz einfach.

Verfasst: 15.08.2007 13:39
von Rubiko
Alles klar, danke für deine Hilfe :allright:
Hab ich mir wohl wirklich zu kompliziert vorgestellt

Grüße,
Rubiko