[Monkey] Listen Sortieren
Übersicht

![]() |
DottakopfBetreff: Listen Sortieren |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo Blitzer,
ich dachte ich bekomms hin, aber irgendwie habe ich tatsächlich keinen peil.. Ich habe autos die aus verschiedenen Richtungen(X) erstellt werden. Wenn diese knapp aneinander fahren kann es sein das sich die Grafiken unschön überlagern. Abhilfe würde verschaffen wenn man die Liste durchgeht und anhand der Y Position neu sortiert. Besser wäre wenn man beim erstellen gleich in die richtige Listenposition schreiben könnte. Nur wie ? Also syntax technisch.. ich habe den Befehl: Zitat: Method InsertBeforeEach : Void ( where:T, data:T )
Inserts data before each element in the list equal to where. in meinem Projekt wird nach einem gewissen Tick ein Auto an der "Spawnerposition" erstellt: Code: [AUSKLAPPEN] GameEnemy.AddFirst(New TEnemy(3, fSpawnerPosition.fVecX, fSpawnerPosition.fVecY, 10))
wie muss ich es umbauen das es sowas machen würde: Pseudo Code: [AUSKLAPPEN] GameEnemy.InsertBeforeEach(TEnemy, position.Y > Spawner.Y )
dann habe ich das Auto(TEnemy) ja noch nicht erstellt, da der New Aufruf da ja auch noch mit rein muss. Alternativ bin ich auch bereit die Liste bei jeden Durchlauf zu sortieren.. nur wie der Sort Befehl zu verwenden ist kann man nun wirklich nicht aus der Hilfe entnehmen... Zitat: Method Sort : Int ( ascending:Int )
Sorts the list. .. na danke auch ![]() wie gebe ich an nach "was" sortiert wird ?? Kann ja nur Aufsteigend oder Absteigend definieren... Helft einen gestrandeten ![]() Gruß Dottakopf |
||
Rechtschreibfehler gelten der allgemeinen Belustigung! |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich weiß leider nicht wie es bei Monkey gelöst wurde, aber unter BMax ist es so dass Du sort eine comparefunc übergeben kannst welche bestimmt anhand welchen Kriteriums sortiert wird. Diese Function kann man selbst implementieren. Ich weiß aber leider nicht wie monkey das mit Funktionspointern etc. handhabt und ob es da genau so ist.
Edit: Habe mir mal monkey gezogen und in die Doku geguckt: Du musst eine methode Compare erstellen die den Vergleich durchführt, schau dazu mal in die von List abgeleiteten Klassen rein. |
||
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 |
![]() |
Dottakopf |
![]() Antworten mit Zitat ![]() |
---|---|---|
ahh compare war das richtige Stichwort!
habe dazu was im www gefunden: Code: [AUSKLAPPEN] Import mojo.app Import mojo.graphics Import mojo.input Global myGame:MyGame Class SpriteList Extends List<Sprite> Method Compare:Int(a:Sprite, b:Sprite) If a.x > b.x Return 1 If a.x = b.x Return 0 Return -1 End End Class Sprite Global list:SpriteList = New SpriteList Field x:Float = 1.0 Field y:Float = 1.0 Method New(a:Float) x=a End End Function Main:Int() myGame = New MyGame Return 0 End Function Class MyGame Extends App Method OnCreate() SetUpdateRate 30 ''with with float data For Local i:= 0 To 1000 Local alien:Sprite = New Sprite(Rnd(0,100.0)) Sprite.list.AddLast(alien) Next Print "ascending" Sprite.list.Sort(True) ''ascending For Local temp:Sprite = Eachin Sprite.list Print temp.x Next Print "" Print "descending" Sprite.list.Sort(False) ''descending For Local temp:Sprite = Eachin Sprite.list Print temp.x Next End Method OnUpdate() If KeyHit(KEY_ESCAPE) Then Error "" End Method OnRender() Cls DrawText "Done.",0,0 End End ich denke damit kann ich das erstmal bauen ![]() Vielen Vielen Dank! Gruß Dottakopf |
||
Rechtschreibfehler gelten der allgemeinen Belustigung! |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group