Seite 1 von 1
Bild von oben nach unten laden
Verfasst: 22.11.2008 10:46
von FosJonas
wie lade ich ein bild das zuerst die grafiken die oben sind geladen werden und dann die unten sind? Also die X position. Es sind einheiten also grafiken die sich bewegen.
wäre nett wen ihr mir weiter helfen würdet.
Verfasst: 22.11.2008 11:52
von ZeHa
Bin jetzt nicht ganz sicher, aber meinst Du zufällig sowas hier?

Verfasst: 22.11.2008 12:04
von FosJonas
Nein, ich meine wen z.b. ein objekt auf 200,300 ist und das andere auf 100,300 soll das mit 100,300 zuerst geladen werden. nur das ich ganz viele objekte habe.
Verfasst: 22.11.2008 12:11
von ZeHa
Okay dann mußt Du jetzt nur erzählen was Du mit "laden" meinst. Meinst Du evtl. anzeigen, und zwar so, daß sie sich gegenseitig "korrekt" überdecken?
Verfasst: 22.11.2008 12:22
von FosJonas
Ja sie sollen sich "korekt" überdecken. also so das die untere unit im vordergrund ist und die hintere eben nicht.
Verfasst: 22.11.2008 13:07
von ZeHa
Okay dann mußt Du die Objekte sortieren.
Wie hast Du Deine Objekte gespeichert? Eine gängige Methode wäre es, die Landschaft in einem oder zwei Arrays zu haben (ein GroundLayer und ein TopLayer) und die beweglichen Objekte in einer LinkedList.
Dann gehst Du wie folgt vor:
Du zeichnest als erstes Deinen GroundLayer (also den Erdboden). Anschließend zeichnest Du zeilenweise den TopLayer (da sind Bäume und Mauern usw. drin), aber zeichnest gleichzeitig auch die entsprechenden Objekte aus der Liste.
Und zwar fängst Du erstmal mit der Liste an. Diese sortierst Du erstmal mit SortList(), danach nimmst Du Dir das erste Objekt und zeichnest es NUR DANN, wenn es so weit oben ist, daß es noch hinter den festen Objekten aus der aktuellen TopLayer-Zeile steht. Wenn Du es gezeichnet hast, nimmst Du das nächste Objekt und schaust wieder, ob Du es zeichnen mußt. Das machst Du so lange, bis Du auf ein Objekt stößt, das zu weit unten ist, als daß Du es noch zeichnen dürftest. In solch einem Fall zeichnest Du dann einfach die aktuelle TopLayer-Zeile. Danach geht's wieder mit der Liste weiter.
Also grob formuliert:
Code: Alles auswählen
NewList objects.Object() ; unsere Liste
#TILE_HEIGHT = 32 ; Höhe eines Feldes
#MAP_HEIGHT = 128 ; Höhe der Karte (Anzahl der Felder in Y-Richtung)
;...
FirstElement(objects()) ; wir springen zum ersten Element
For i = 0 to #MAP_HEIGHT
While objects()\y < i * #TILE_HEIGHT
; ... -> Objekt zeichnen
NextElement(objects())
Wend
; ... -> TopLayer-Zeile zeichnen
Next i
EDIT: Mist, mit SortList() kann man nur einfache Datentypen sortieren und keine Strukturen. Da mußt Du Dir halt irgendwas einfallen lassen, notfalls selbst eine Sortier-Routine schreiben.
Verfasst: 22.11.2008 13:38
von FosJonas
danke für die schnelle hilfe
hmmm jetzt muss ich das ding nur noch zusammenbasteln, sieht zimlich kompliziert aus.
Verfasst: 22.11.2008 14:38
von ZeHa
Naja Du brauchst halt 'ne Möglichkeit um die Objekte nach Y-Position zu sortieren.
Hast Du es denn bisher schon hingekriegt, die Map (ohne Objekte) zu zeichnen? Wenn ja, dann brauchst Du - nachdem Du das mit der Sortierung hast - ja einfach nur dort ansetzen, wo Du Zeile für Zeile Deine Map zeichnest.
Viel Erfolg

Verfasst: 22.11.2008 21:18
von nco2k
ZeHa hat geschrieben:...Mist, mit SortList() kann man nur einfache Datentypen sortieren und keine Strukturen...
c ya,
nco2k
Verfasst: 23.11.2008 04:04
von ZeHa
Ahh

Wußte ich doch daß das irgendwie ging, hab es auch vor Jahren mal benötigt... aber inzwischen lange nicht mehr, drum hat's mich auch gewundert
