2D Bilder - Zeichenreihenfolge

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Silvio

Betreff: 2D Bilder - Zeichenreihenfolge

BeitragSa, März 17, 2012 8:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn sich 2D Bilder überschneiden, dann wird ja das Bild sichtbar sein, das als letztes gezeichnet wurde. Wenn jetzt z.B. 2 Figuren aneinander vorbeilaufen, dann muss man ja darauf achten, wer jetzt wen überlappt. Wir handhabt ihr sowas? Ich will keinen Code. Eher eine grobe Beschreibung, wie man so ein Problem löst. Ich hab es eigentlich schon selbst gelöst, aber es kommt mir als Anfänger so vor, als wäre das zu umständlich. Ich sage einfach, dass eine Figur hinter einer anderen steht, sobald die Pixel am Fuß weiter oben, also einen kleineren Y-Wert haben, als die der anderen Figur. Ist das okay so, oder macht man das anders?

BladeRunner

Moderator

BeitragSa, März 17, 2012 9:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Das geht so absolut in Ordnung, solange es für dich und deinen Anwendungszweck funktioniert Wink
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

PacMani

BeitragSa, März 17, 2012 9:45
Antworten mit Zitat
Benutzer-Profile anzeigen
So machen es auch die alten Adventure Games ala SCI etc.
 

Silvio

BeitragMi, Okt 17, 2012 23:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Als ich diesen Thread eröffnet hab, kam mir meine Lösung zum Problem so amateurhaft vor, aber ist ja eigentlich klar, dass man das so macht. Hat sich zu dem Zeitpunkt so angefühlt, als würde ich ein Bild innerhalb ner Schleife immer wieder laden oder nen ähnlichen Anfängerfehler Very Happy

naja mittlerweile hat sich mein Problem zu dem Thema verändert. Wenn ich 2 Bilder bzw. Spielfiguren habe, dann ist es noch relativ einfach mit dem Zeichnen, aber es ist ja normal, dass etliche Spielfiguren sich auf dem Feld bewegen. Also habe ich nun beliebig viele Figuren, die durch types beschrieben sind. Ich kann die einzelnen Koordinaten der Bilder mit einander vergleichen, aber wie kann ich eine einfache Zeichenreihenfolge erstellen?

Xeres

Moderator

BeitragDo, Okt 18, 2012 0:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn du eine For...Each Schleife zum zeichnen benutzt, müsstest du die Objekte nach ihrer y Position sortieren - sprich, sie in der Typeliste mit Insert Before/After an die richtige Stelle schieben.
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)
 

Silvio

BeitragDo, Okt 18, 2012 0:12
Antworten mit Zitat
Benutzer-Profile anzeigen
aha, diese Dinger also, an die ich mich bisher nie rangetraut hab Very Happy
ist der Aufwand, der dabei bei jedem Frame gemacht wird auch zu vernachlässigen?

Xeres

Moderator

BeitragDo, Okt 18, 2012 0:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Das kommt auf den Sortieralgorithmus, die Anzahl der Objekte und die CPU an.
Ich würd's möglichst nicht jeden Frame machen, sondern den Aufwand verteilen. Da musst du mal einen Benchmark machen, wie lange es im Mittel / Schlimmstenfalls dauert.
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)

BladeRunner

Moderator

BeitragDo, Okt 18, 2012 9:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Ist die Liste einmal nach y-Koordinate sortiert ist der Aufwand später vernachlässigbar wenn Du jedes Objekt bei seiner Bewegung rasch neu einordnest - hier muss ja idR keine komplette Sortierung mehr laufen da es ja seinen Platz wahrscheinlich nicht viel in der Liste verändern wird, daher kann beim ersten passenden Ergebnis abgebrochen werden wenn man von aktueller Position Richtung neuer Position durch die Liste iteriert.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

Silvio

BeitragDo, Okt 18, 2012 22:14
Antworten mit Zitat
Benutzer-Profile anzeigen
jetzt muss ich aber was einfaches fragen:

wie verschiebt man Objekte in der Reihenfolge?

es gibt ja die Befehle After und so weiter, aber mit denen bestimmt man ja welches Objekt angesprochen werden soll. Muss man manuell die Werte von den Types austauschen?

Xeres

Moderator

BeitragDo, Okt 18, 2012 23:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie gesagt: Insert
Beispiel:
BlitzBasic: [AUSKLAPPEN]
Type TTest
Field n%
End Type

Local i%, t.TTest

; Erzeuge Werte
For i=0 To 5
t=New TTest
t\n=i
Next

;Zeige Werte:
For t = Each TTest
Print(t\n)
Next

Print("")
Print("- - -")
Print("")

; Jetzt! Schiebe den Letzten Wert ganz nach oben:
Insert Last TTest Before First TTest
; (statt "Last TTest" kann man auch beliebige TTest Objekte angeben)

;Nach der Operation:
For t = Each TTest
Print(t\n)
Next

WaitKey()
End
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)
 

Silvio

BeitragFr, Okt 19, 2012 0:53
Antworten mit Zitat
Benutzer-Profile anzeigen
okay danke und wie komme ich an eine beliebige stell in der liste ? ich habe ja nur die befehle: first last before und after.


edit: okay selber draufgekommen.
 

PhillipK

BeitragFr, Okt 19, 2012 5:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Einfach mal in den Raum gestellt, würde ich sagen, mit einer Whileschleife, einer temporären variable (initialisiert auf First eines Types Smile ) und dann n mal weiter mit After ^^

Also hopp, ich lerne auch =) Poste deinen weg!
 

Silvio

BeitragFr, Okt 19, 2012 14:10
Antworten mit Zitat
Benutzer-Profile anzeigen
du kannst ja 2 objekte von einem type gleichzeitig laden, indem du die verschieden benennst und nachdem du sie verglichen hast kannst du ja nach bedarf das eine vor das andere setzen oder wie du halt willst.

edit: puh ich habs endlich geschafft Very Happy hat mehrere Stunden gedauert, weil ich das ja noch nie zuvor gemacht hab. bei 1000 zufälligen objekten dauert das sortieren etwa 1 sekunde, bei 500 fast augenblicklich. das reicht mir vollkommen, selbst wenn ich jeden frame alles sortieren würde, weil ich in absehbarer Zeit nichtmal 50 Objekte rumlaufen habe.

Nova

BeitragSa, Okt 20, 2012 14:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Sortieren von 1000 Einträgen dauert eine Sekunde? Öhm, irgendwie recht lang, oder irre ich mich da?

Wenn du mal Zeit und Lust hast, kannst du deinen Code ja mal hier online stellen. Zum einen könnten wir dann noch Tipps geben, zum anderen würdest du anderen Leuten helfen, falls sie ein ähnliches Problem haben. Smile
AMD Athlon II 4x3,1GHz, 8GB Ram DDR3, ATI Radeon HD 6870, Win 7 64bit
 

Silvio

BeitragMo, Okt 22, 2012 17:28
Antworten mit Zitat
Benutzer-Profile anzeigen
kann ich noch machen, aber jetzt hab ich ein neues Problem.
Jetzt werden alle Objekte von dem Type sortiert, das heißt die Figuren, die durch diesen Type beschrieben werden, überlappen sich nicht mehr. Der Hauptcharakter oder andere Objekte im Spiel werden aber durch andere Types usw. beschrieben. Wie kann ich nun deren Zeichenreihenfolge bestimmen?

Xeres

Moderator

BeitragMo, Okt 22, 2012 17:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Am besten bekommen die Bilder einen Type, damit du die unabhängig vom Objekt darstellen kannst.
BlitzBasic: [AUSKLAPPEN]
Type TImage
Field img, x, y
End Type

Type TPlayer
Field img.TImage
End Type

Type TItem
Field img.TImage
End Type
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)
 

Silvio

BeitragMo, Okt 22, 2012 17:46
Antworten mit Zitat
Benutzer-Profile anzeigen
aha ich dachte mir schon, dass es mit verschachteln klappt, aber hatte wiedermal keine Ahnung wie das geht.

edit: okay ich bin nun soweit, dass verschiedene Types ein "Image"- Type erstellen und diese Image-Types kann ich nun sortieren und anzeigen. Mein Problem ist nun, wie kann ich die Image-Types nun ansprechen?
Die Situation ist die: Die Position von einem Spieler wird in seinem richtigen Objekt gespeichert und im Image-Type, welches diesen Spieler anzeigt. Wenn sich nun die Position ändern, dann kann ich sie ja einfach im richtigen Objekt ändern, aber wie komme ich an das Image-Type?

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group