Map Editor

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Rubiko
Beiträge: 943
Registriert: 25.02.2005 19:43
Computerausstattung: Intel i7 2600k
8GB Ram
GeForce GTX 560 Ti
Wohnort: Schwabach

Map Editor

Beitrag 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
Ich wollte die Welt verändern, doch Gott gab mir nicht den Quelltext.
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Beitrag 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:
Kinder an die Macht http://scratch.mit.edu/
Benutzeravatar
Rubiko
Beiträge: 943
Registriert: 25.02.2005 19:43
Computerausstattung: Intel i7 2600k
8GB Ram
GeForce GTX 560 Ti
Wohnort: Schwabach

Beitrag 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?
Ich wollte die Welt verändern, doch Gott gab mir nicht den Quelltext.
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag 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.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Beitrag 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:
Kinder an die Macht http://scratch.mit.edu/
Benutzeravatar
Zaphod
Beiträge: 2875
Registriert: 29.08.2004 00:40

Beitrag 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.
Benutzeravatar
Rubiko
Beiträge: 943
Registriert: 25.02.2005 19:43
Computerausstattung: Intel i7 2600k
8GB Ram
GeForce GTX 560 Ti
Wohnort: Schwabach

Beitrag von Rubiko »

Also einfach mit CreateImage und darauf dann meine Map zeichnen?
Wenn ich Recht habe, dann denkt man manchmal einfach nicht einfach genug...
Ich wollte die Welt verändern, doch Gott gab mir nicht den Quelltext.
Benutzeravatar
Zaphod
Beiträge: 2875
Registriert: 29.08.2004 00:40

Beitrag 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.
Benutzeravatar
Rubiko
Beiträge: 943
Registriert: 25.02.2005 19:43
Computerausstattung: Intel i7 2600k
8GB Ram
GeForce GTX 560 Ti
Wohnort: Schwabach

Beitrag von Rubiko »

Alles klar, danke für deine Hilfe :allright:
Hab ich mir wohl wirklich zu kompliziert vorgestellt

Grüße,
Rubiko
Ich wollte die Welt verändern, doch Gott gab mir nicht den Quelltext.
Antworten