Z-Order Objektübergreifend

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

marcel_bohn

Betreff: Z-Order Objektübergreifend

BeitragMo, Nov 22, 2010 22:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Problem:
Also ich möchte meine Objekte hintereinander auf dem Bildschirm anzeigen lassen. Wenn zum Beispiel ein Monster auf der Y-Achse über dem Spieler ist, so soll der Spieler vor das Monster gezeichnet werden.

Lösung?
Als einzige Lösung wär mir eingefallen eine Schleife zu erstellen die jeden einzelne Y Wert überprüft und wenn der momentane Y Wert mit dem Objekt Y Wert übereinstimmt, das Objekt zeichnet

Ist das eine gute Lösung? Oder habt ihr vllt. noch ne andere Idee? BIn mir unsicher...

schonmal Danke für die Antworten!

Xeres

Moderator

BeitragMo, Nov 22, 2010 22:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja du musst deine Objekte sortieren - dazu gibt es diverse Algorithmen, die Forensuche kann da sicher helfen.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Silver_Knee

BeitragMo, Nov 22, 2010 22:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Einfach in der Reihenfolge zeichnen in der Sie angezeigt werden soll.

Wenn die Objekte in ner For-Each-Schleife sind musst du sie umsortieren.

marcel_bohn

BeitragMi, Apr 18, 2012 16:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Sry das ich das alte ding wieder aufwärme, aber ich muss dazu noch etwas fragen und will deshalb kein neues Thema anfangen. Hab nämlich wieder ein Problem mit diesem sortieren!

Also ich hab ja wie oben beschrieben mehrere Types z.b. (player,monster,item,attack,auto). Muss ich die jetzt alle in die selbe liste aufnehmen, das ich sie je nach y-achse nacheinander zeichnen kann? Dann hätte ich ja nur eine Liste für jeden Type der sich auf der Karte befindet!
Außerdem müsste ich ja dann eine universelle "render funktion" schreiben, das jeden Type zeichnet. Geht das nich irgendwie einfacher? Question

Xeres

Moderator

BeitragMi, Apr 18, 2012 16:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich würde ein neuen Type für Bilder anlegen und jedes Spiel-objekt bekommt so ein Bild-Type. Die kannst du unabhängig vom Rest sortieren und anzeigen.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

marcel_bohn

BeitragMi, Apr 18, 2012 16:52
Antworten mit Zitat
Benutzer-Profile anzeigen
ich kann mir das jetzt nicht so gut vorstellen, hast du vllt. ein beispiel für soetwas?

Xeres

Moderator

BeitragMi, Apr 18, 2012 17:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Auf die Schnelle kein lauffähiges, aber...
BlitzBasic: [AUSKLAPPEN]
Type TObj
Field img.Timg
End Type

Type Timg
Field x,y,img
End Type

;' In einer Create-Funktion:
Local Objekt.TObj = New TObj
Objekt\img = New Timg

;' Koordinaten ansprechen:
Objekt\img\x
Objekt\img\y

;' Bild zuweisen:
Objekt\img\img = GlobalesBild

...so sollte es dann Grundlegend aussehen.
Jedes Objekt, was angezeigt wird, bekommt ein Timg verpasst. Diese Typeliste kann man wunderbar nach Koordinaten sortieren und rendern. Wenn man die Koordinaten eines Objektes braucht, nutzt man die Verlinkung.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

marcel_bohn

BeitragMi, Apr 18, 2012 17:30
Antworten mit Zitat
Benutzer-Profile anzeigen
jop, das is genau das wonach ich gesucht habe, das bedeutet doch das ich dann in meiner "render funktion" nicht das bild zeichne, sondern nur die Variablen des "Timg" ändere (x,y,img,scale,usw..) und die Timg's werden dann in einer anderen Funktion sortiert und gezeichnet, richtig?

Danke für die schnelle Antwort!

Xeres

Moderator

BeitragMi, Apr 18, 2012 17:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Jopp, so sollte es sein.
Nur nicht vergessen, dass die Timg-Objekte dann auch mit Delete gelöscht werden müssen, entweder mit ihrem Spiel-Objekt oder nach einer Sterbeanimation. Sonst bleiben es Karteileichen bzw. es gibt einen Memoryleak. Bei Bildern sollte es schnell auffallen, wenn sie sich noch im Sichtbereich befinden.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group