Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Map scroll Problem! (https://www.delphipraxis.net/161844-map-scroll-problem.html)

raysto 23. Jul 2011 23:45

Map scroll Problem!
 
Hi! Ich hab momentan ein echt großes Problem. In meinem Map editor kann ich bereits alles was ich möchte, nur das scrollen fehlt mir. Und zwar möchte ich es so machen, dass man z.b. auf einen Button "Scroll down" klickt und dann werden alle Bilder (dynamisch) 16 pixel nach oben bewegt(Meine felder sind 16x16 px. groß). Für den Bereich des platzierens habe ich auch eine Begrenzung. Und genau deswegen ist die Methode mit den Werten ädnern für Top/Left nicht sehr gut, da man so in etwa schummeln könnte um mehr Bilder auf einer Map zu haben. Und das zweite Problem darin ist, dass die Bilder sich dann in meine Buttons und Bilder Auswahl bewegen würden. Also habe ich es so vor, dass ich bei Scroll down z.b. das Bild unter einem Bild in das Obere reingeladen wird. Mit scroll up eben umgekehrt. Veranschaulischung:
AB
CD A,B... = Bilder

Wenn ich dann auf den Scroll down button klicke, wird C in A geladen und D in B und mit seitwärstscrollen C in D/D in C und A in B/B in A.
So würden sich auch die Bilder nicht bewegen.
Nur leider habe ich KEINE AHNUNG wie ich das anstellen soll :(

blackfin 24. Jul 2011 02:22

AW: Map scroll Problem!
 
Einfach die TImage-Instanzen sauber benennen (Reihen & Spalten, z.B. "Image_1_1" statt "A" und "Image_2_1" statt "C" und dann einfach mit Offsets in horizontaler und vertikaler Achse arbeiten, mit denen du ermitteln kannst, welche Bilder in welche Felder geladen werden sollen, ausgehend vom Ursprungszustand, wenn man die entprechenden Buttons hin und herklickt, die wiederum den Offset der entsprechenden Richtung inkrementieren bzw. dekrementieren.

Allerdings halte ich für einen Map-Editor, der aus einzelnen (T)Images besteht, für ziemlich den falschen Weg (falls ich das richtig verstanden habe..)...warum nimmst du nicht eine 2D Engine oder schreibst dir dafür eine rudimentäre selbst, und arbeitest dann direkt auf einem Canvas oder machst das ganze mit GDI(+) ?

himitsu 24. Jul 2011 07:59

AW: Map scroll Problem!
 
Leg doch alles in eine TScrollBox?

Wobei man bei sowas ja eigentlich nich tdie GUI-Komponenten (TImage) bverschiebt, sondern deren Inhalt.

Und am aller Besten weäre es, wenn es nur eine anzeigecomponente (TImage, oder besser noch TPaintBox hat, die komplette Map nur in einer entsprechenden Struktur (z.B. 2-dimensionales Array) ablegt und jeweils den aktuellen Abschnitt (im OnPaint der PaintBox) zur anzeige bringt.

Wenn man es einfacher haben will, dann nutzt man passende spieleengines, wie z.B. Hier im Forum suchenAndorra 2D.

raysto 24. Jul 2011 11:19

AW: Map scroll Problem!
 
@blackfin
Sorry, aber das was du schreibst verstehe ich NULL :( Un ich habe das alles mit TImages gemacht weil ich nicht wusste wie ich es sonst machen soll...
@himitsu
Wenn ich das in eine Scrollbox legen würde, könnte ich keine Images per darüber platzieren ;)
2D engines soll ich/will ich nicht benutzen, da das für die Schule ist und ich nicht möchte dass man immer alles sofort ganz leicht machen kann.

himitsu 24. Jul 2011 11:28

AW: Map scroll Problem!
 
Wie gesagt, das was die fertigen Engines machen, kann man auch ganz leicht selber nachbauen und lernt dabei die OOP kennen.
Wo man dann auch gleich mal GUI und Logik trennen kann.

* Entweder man legt sich ein Array an, mit TBitmaps an, worin alle Bilder gespeichert sind
und in einer Zeichenroutine (Prozedur) wird dann der Sichtbare Teil dieses Arrays ausgegeben.

* Die nächste Stufe wäre es, wenn man in dem Array nur Referenzen auf eine Sammlung/Liste von TBitmaps hat (einige Bilder werden sich uf der karte doch wiederholen?).

* Danach kommt man dann soweit, daß man eine Liste hat, in welcher sich die Grafikelemente befinden.
Jedes Element (eine Klasse, abgeleiter von einer Basisklasse) kennt seine Position, sein Bild und andere Eigenschaften.
Und einer Ausgabefunktion wird dann, bei Änderung an der Liste oder deren enthaltener Grafikelemente und im OnPaint der Paintbox, alle sichtbaren Elemente aus dieser Liste auf die Zeichenfläche gebracht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:10 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz