Grafiken der Y-Achse entlang sortieren

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

denial

Betreff: Grafiken der Y-Achse entlang sortieren

BeitragFr, Mai 14, 2004 9:11
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Mai 14, 2004 9:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Nach welchen Kriterien kann man entscheiden was weiter hinten liegt? Mit den bisherigen Informationen ist es nicht gerade einfach Dir zu helfen Wink
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...
 

denial

BeitragFr, Mai 14, 2004 9:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Na die Größe der Y-Koordinate natürlich Wink
Kleinere Y-Koordinate heißt, dass das Objekt weiter hinten sein müsste, und somit als erstes gezeichnet werden muss... Klingt verwirrend Wink

Naja ich habs mit Bubblesort probiert, aber irgendwie hat das nich geklappt....

Hubsi

BeitragFr, Mai 14, 2004 9:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Ahso! Ich hab viel zu kompliziert gedacht Embarassed Ich würd die Größen in ein Dim-Feld speichern und dann eine Sortierfunction drüberlaufen lassen:
Code: [AUSKLAPPEN]
Const anzahl_bilder=10 ; Anzahl der Bilder
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
Ungetestet, sollte aber funktionieren Wink
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

Jan_

Ehemaliger Admin

BeitragFr, Mai 14, 2004 11:37
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Mai 14, 2004 12:01
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Mai 14, 2004 20:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Naja wenn ich Y Achse sag, kannst davon ausgehen, dass ich Y Achse mein.... Smile Ich habs jetzt hinbekommen, danke für eure Hilfe.. Smile
Wirkt sogar ganz gut. Wink

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group