[Monkey] Listen Sortieren

Übersicht Andere Programmiersprachen Beginners-Corner

Neue Antwort erstellen

Dottakopf

Betreff: Listen Sortieren

BeitragSa, Mai 09, 2015 12:33
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Twisted Evil

wie gebe ich an nach "was" sortiert wird ?? Kann ja nur Aufsteigend oder Absteigend definieren...


Helft einen gestrandeten Confused

Gruß
Dottakopf
Rechtschreibfehler gelten der allgemeinen Belustigung!

BladeRunner

Moderator

BeitragSa, Mai 09, 2015 23:17
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Mai 10, 2015 11:08
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Wink

Vielen Vielen Dank!

Gruß
Dottakopf
Rechtschreibfehler gelten der allgemeinen Belustigung!

Neue Antwort erstellen


Übersicht Andere Programmiersprachen Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group