Grafiken der Y-Achse entlang sortieren
Übersicht

denialBetreff: Grafiken der Y-Achse entlang sortieren |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi,
ich möchte Grafiken entlang der Y-Achse sortieren, also das Objekte, die weiter hinten liegen, als erstes gezeichnet werden. Ich hatte schon einen Lösungsansatz, aber der war ziemlich langsam und war nicht fehlerfrei. Hat wer ne Idee? Danke. |
||
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nach welchen Kriterien kann man entscheiden was weiter hinten liegt? Mit den bisherigen Informationen ist es nicht gerade einfach Dir zu helfen ![]() |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
denial |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Na die Größe der Y-Koordinate natürlich ![]() Kleinere Y-Koordinate heißt, dass das Objekt weiter hinten sein müsste, und somit als erstes gezeichnet werden muss... Klingt verwirrend ![]() Naja ich habs mit Bubblesort probiert, aber irgendwie hat das nich geklappt.... |
||
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ahso! Ich hab viel zu kompliziert gedacht ![]() Code: [AUSKLAPPEN] Const anzahl_bilder=10 ; Anzahl der Bilder
Ungetestet, sollte aber funktionieren Dim picbig(anzahl_bilder-1) For i=0 To anzahl_bilder-1 picbig(i)=ImageHeight(pic(i)) Next For i=1 To anzahl_bilder Sort() Next Function Sort() For i=0 To anzahl_bilder-2 If Picbig(i)>Picbig(i+1) temp=Pic(i) Pic(i)=Pic(i+1) Pic(i+1)=temp EndIf Next End Function ![]() |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
![]() |
Jan_Ehemaliger Admin |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich glaube mahl, du meinst, an der Z - Achse.
Dann sage ich dazu: Code: [AUSKLAPPEN] Graphics 800,600,16,2
anzahl = 17 Dim Bilder(Anzahl,3) SeedRnd MilliSecs() For s = 0 To anzahl Bilder(s,0) = LoadImage("Bild"+s+".bmp") Bilder(s,1) = Rand(GraphicsWidth()-ImageWidth(Bilder(s,0))) ; X Bilder(s,2) = Rand(GraphicsHeight()-ImageHeight(Bilder(s,0))) ; Y Bilder(s,3) = Rand(0,Anzahl * 10) ; Z DebugLog Bilder(s,3) Next SetBuffer BackBuffer() Repeat Cls h= 0 g= 0 While h < anzahl For s = 0 To anzahl If Bilder(s,3) = g Then DrawImage Bilder(s,0),Bilder(s,1) ,Bilder(s,2) h=h+1 End If Next g = g+1 Wend Flip Until KeyHit(1) !!!Habs berichtigt!!! müsste klappen, wie immer nicht getestet! |
||
between angels and insects |
![]() |
Jan_Ehemaliger Admin |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich musste noch ein wenig herumspielen und jetzt, das Prinzip zum Testen:
Code: [AUSKLAPPEN] Graphics 800,600,16,2
anzahl = 17 Dim Bilder(Anzahl,3) SeedRnd MilliSecs() For s = 0 To anzahl Bilder(s,0) = LoadImage("Bild"+s+".bmp") ScaleImage Bilder(s,0),5,5 Bilder(s,1) = Rand(GraphicsWidth()-ImageWidth(Bilder(s,0))) ; X Bilder(s,2) = Rand(GraphicsHeight()-ImageHeight(Bilder(s,0))) ; Y Bilder(s,3) = Rand(0,Anzahl * 100) ; Z SetBuffer ImageBuffer(Bilder(s,0)) Color 10,10,10 Text 0,0,Bilder(s,3) Next Color 255,255,255 SetBuffer BackBuffer() Repeat Cls h= 0 g= 0 While h < anzahl For s = 0 To anzahl If Bilder(s,3) = g Then DrawImage Bilder(s,0),Bilder(s,1) ,Bilder(s,2) h=h+1 End If Next g = g+1 Wend t2 = t1 t1 = MilliSecs() Text 0,0,Int(1.0/(t1-t2)*1000.0) + "FPS" Flip 0 Until KeyHit(1) Damit, funktionieren solche Grafiken, wie bei little Fighter2! Aber, es ist zu bedenken, das diese Funktion jedes mal neu berechnet! und das jeden Frame! Darum, möglichst wenige Bilder Berechnen und Z möglichst klein halten! |
||
between angels and insects |
denial |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Naja wenn ich Y Achse sag, kannst davon ausgehen, dass ich Y Achse mein.... ![]() ![]() Wirkt sogar ganz gut. ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group