Große 2D-Zeichnung skrollbar (Image-Grenze)

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag von PMV »

Also StartDrawing() ist bei benutztung von Images ziemlich schnell, also viel schneller als beim Screen. Wenn du deinen Netzplan so speicherst, wie Freedimension es jetzt mal als Beispiel gezeigt hat, du die Linien und Knotenpunkte (Kreise) per 2D-Drawing machst und auch den Text mit Locate() und DrawText(), sollte eigentlich kaum was anfallen.

Mehre ImageGadgets halte ich für überflüssig, da du eh immer bei verschiebung alles neu zeichnen musst. Somit müssteste jedem ImageGadget dann einzelln neu zuweisen, besser wäre hier 1 ImageGadget in welches du alles sichtbare malst. Hier sind Tiles natürlich genau so möglich, nur das du die X und Y Position halt in Pixel angeben musst, dafür kannste z.B. auch schön weich scrollen lassen, fals du möchtest.

Von daher denke laufen alle möglichkeiten auf das selbe hinaus, dein Netzplan in ein Image zeichnen ... das aber entweder auf ein ImageGadget zeichnen oder direkt auf das Fenster.

Wenn dein Netzplan starr ist und nichts animiert werden soll, dürfte das ImageGadget die bessere Möglichkeit darstellen. Hast du aber z.B. vor auf die Position der Maus zu reagieren, z.B. wenn diese über einen Text ist, diesen hervorzu heben, ist es vielleicht wieder besser, kein ImageGadget dafür zu verwenden, da sonnst ständig das Image dem ImageGadget zugewiesen werden müsste. Allerdings übernimmt Windows ja hier das Zeichnen, somit sollteste vielleicht mal selber Testen, wie viel Rechenleistung das ImageGadget benötigt bei Änderungen, und wie es im verhältnis ist, wenn du das alles selber machst, also direkt das Image auf dem Fenster darstellst. Sollte dieser test positiv ausfallen ist die 3. Möglichkeit denke ich die beste. Und wenn du wirklich nur "Stumpf" den Netzplan darstellen willst ist die 3. Möglichkeit (1 ImageGadget) so wie so für diesen Fall die Empfehlenswerteste.

Zumindest würd ich das so machen :D

MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> da du eh immer bei verschiebung alles neu zeichnen musst

eben nicht beim tile-prinzip, da ja hier die elemente vorgegeben sind.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
freedimension
Admin
Beiträge: 1987
Registriert: 08.09.2004 13:19
Wohnort: Ludwigsburg
Kontaktdaten:

Beitrag von freedimension »

Bei meiner Lösung könntest du übrigens auch noch *trara* zoomen. Das hatte ich noch vergessen zu erwähnen. Kennst du Map24, so ungefähr stelle ich mir das vor. Das ist zwar ein ungeheuer komplexes Beispiel, aber das geht natürlich auch eine Nummer kleiner, also nicht abschrecken lassen :allright:
Beginne jeden Tag als ob es Absicht wäre!
Bild
BILDblog
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag von PMV »

Kaeru Gaman hat geschrieben:> da du eh immer bei verschiebung alles neu zeichnen musst

eben nicht beim tile-prinzip, da ja hier die elemente vorgegeben sind.
Du hast die Elemente, aber dennnoch müssen diese auf dem Image neu gezeichnet werden. Hier wird das Image ja wie ein Screen verwendet. Auf dem Screen muss auch bei jedem Frame alles neu gezeichnet werden, wobei hier die Tiles halt Sprites sind, er aber sich anscheinend für Images entschieden hat, das prinzip bleibt aber.

Wobei ich denke, wenn er es ohne vorgegebene Elemente macht, also nur die Lines usw. immer zeichnet könnte es sogar schneller sein, da her bei großen Abständen vieles nicht gezeichnet werden müsste, aber andererseits müsste es auch komplet mit dem Box()-Befehl alles jedes mal gelöscht werden. Naja müsste man wohl mal testen, aber viel wird sich da auch nicht tuen.

MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

@PMV
nein, das ist einfach falsch verstanden!

das image ist in der analogie nicht der screen, sondern das sprite.
der screen ist die gruppe von image-gadgets, die auf dem fenster stehen.

ich habe
1. eine bibliothek von vorgefertigten images (elemente und verbindungslinien)
2. eine tabelle, die die platzierung der images angibt.
3. ein raster von imagegadgets auf dem window.

ich aktualisiere jetzt lediglich die imagenummer im imagegadget.

also mal ein beispiel...
image 0 sei eine horz. Linie
image 1 sei ein kreis
image 3 sei ein quadrat

oben in dem plan soll nun die folge linie-kreis-linie-quadrat-linie-kreis-linie erscheinen.
also schreibe ich ins array: 0,1,0,2,0,1,0

jetzt sagen wir mal, ich hab auf dem fenster in der oberen zeile 4 imagegadgets.
also stelle ich dar:
imagegadget #0 -> image #0
imagegadget #1 -> image #1
imagegadget #2 -> image #0
imagegadget #3 -> image #2

wenn ich jetzt scrollen will, veränder ich nur die IDs innerhalb der imagegadgets:

imagegadget #0 -> image #1
imagegadget #1 -> image #0
imagegadget #2 -> image #2
imagegadget #3 -> image #0

und nochmal scrollen

imagegadget #0 -> image #0
imagegadget #1 -> image #2
imagegadget #2 -> image #0
imagegadget #3 -> image #1

usw.

hier muss kein einziges image zur laufzeit neu gezeichnet werden.

das grundprinzip ist ähnlich wie man eine tilemap auf einem screen verwendet.
das wiederum kommt aber vom grundprinzip einer textmatrix, welches hier näher liegt als die tilemap.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag von PMV »

ich aktualisiere jetzt lediglich die imagenummer im imagegadget.
asso meinst du das, sag das doch :lol:

... hm ... weist du wie Windows das intern dann mit
dem ImageGadget händelt?

^^Ich zwar nicht, aber wenn ein ImageGadget ein
neues Image zugewiesen bekommt muss dieses dann
min. 1 mal neu gezeichnet werden :D ... um auf meiner
behauptung zu beruhen *gg*

Aber wenn du das aus der sicht siehst, ist Windows
dafür verantwortlich und man selber muss das
Neuzeichnen nicht übernehmen, das stimmt natürlich.
Naja wenn ihm das reicht, is natürlich auch gut, eine
hand voll Zeilen gesparrt <)

Dann müsster er sich aber zu anfang die Map erst mal
auf ein Image zeichnen und dieses dann in gleichgroße
Tiles unterteilen, die er dann den ImageGadgets zuweisen
kann. Wenn Windows bei dem ImageGadget nicht
übertreibt könnte das vielleicht sogar schneller sein.

MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

PMV hat geschrieben:Dann müsster er sich aber zu anfang die Map erst mal
auf ein Image zeichnen und dieses dann in gleichgroße
Tiles unterteilen, die er dann den ImageGadgets zuweisen
kann.
argl.. nein, eben nicht...

der plan besteht aus festgelegten elementen.
wenn du ein textfile hast, dann kann da auch kein buchstabe halb-zwischen-zwei-zeilen-schräg-über-nem-anderen stehen.

also hast du vorher vorgegebene elemente, die werden kombiniert.

das ist das prinzip von ner tilemap, von ner textmatrix,
von jeder matrix, die datenblöcke enthält.
...is doch echt nit sooo schwer... >__<
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag von PMV »

... ja aber er hat keine solche Tilemap ...

er hat einen Netzplan ... dort gibt es die Position (X, Y) und die verbindungen zum nächsten (oder war das von Freedimension doch nicht das, was er machen möchte?) ... dann muss er diese Positionen erst mal alles zeichnen.

Wenn er feste Objekte hat ... also seine Tilemap muss er diese nur noch laden, klar ^_^

Ich hab dich schon verstanden :wink: ... aber ich denke nen schritt weiter /:-> , vermutlich zu weit, sorry^^

MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

Kaeru Gaman hat geschrieben:{wenn du die daten vorher in einer anderen struktur hast,}
{so mit knotenpunkten wie FD das meinte, dann mußt du eben}
{nen algo haben, der das auf die Map umrechnet.}
....hab ich schon längst gesagt, das...
(gestern um 1709h)
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag von PMV »

Ich habs auch nur wiederholt :D
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Antworten