"for Each " in BlitzMax

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

marcel_bohn

Betreff: "for Each " in BlitzMax

BeitragSa, Jul 06, 2013 14:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo

Ich habe folgendes Problem ich habe verschiedene Objekte (Monster,Player,Item) diese sind alle in einer separaten liste (Monster_list,Player_list,Item_list). Nun möchte ich für alle diese Objekte eine Collide Funktion erstellen. Da alle auf der Karte befindlichen Objekte "extends World_object" sind:

BlitzMax: [AUSKLAPPEN]


Type World_object

Field x:Int,y:Int,z:Int

End Type

Type Item Extends World_object

End Type

Type player Extends World_object

End Type

Type Monster Extends World_object

End Type


Wollte ich meine Collide Funktion Wie beim guten alten BB machen, eben eine schleife die für alle "World_objects" gilt. Die einzige Lösung die ich habe ist das ich jedes objekt zusätzlich in eine World_object_list mache. brauche eben einfach eine "for each" schleife wie es sie bei BB gab oder ähnliches.

Xeres

Moderator

BeitragSa, Jul 06, 2013 15:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Wo exakt liegt denn nun das Problem? Du kannst die Objekte in beliebig viele Listen eintragen.
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)

Thunder

BeitragSa, Jul 06, 2013 16:09
Antworten mit Zitat
Benutzer-Profile anzeigen
BB erzeugt dir für jeden Type eine eigene Liste. Das ist auch der Grund wieso du alle Variablen eines Types mit For Each durchlaufen kannst.
BlitzMax macht das aber nicht. Du musst deine Listen selber managen und wie du schon festgestellt hast, könntest du alle deine World_objects zusätzlich in eine World_object_list eintragen. Das heißt nicht, dass die Objekte dann doppelt vorhanden sind (nur die Referenzen auf die Objekte), also kannst du das getrost machen, sofern du beim Löschen deiner Objekte daran denkst, sie aus allen Listen zu entfernen, in denen sie drinnen stehen Wink

marcel_bohn

BeitragSa, Jul 06, 2013 16:12
Antworten mit Zitat
Benutzer-Profile anzeigen
und wenn ich dann das objekt löschen will, dann muss ich das doch aus jeder liste löschen, oder nicht?

BlitzMax: [AUSKLAPPEN]

ListRemove(player_list,p)
ListRemove(world_obj_list,p)

Tennisball

BeitragSa, Jul 06, 2013 16:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, so löschst du die Referenzen auf das Objekt, sodass früher oder später das Objekt an sich vom GC gelöscht wird.

DAK

BeitragSo, Jul 07, 2013 0:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Was auch geht, ist, dass du in deinem Typ WorldObject eine Liste hast, in der die Listen aller Untertypen sind. Dann brauchst du nur noch sowas:

BlitzMax: [AUSKLAPPEN]

For Local list:TList = EachIn WorldObject.List
For Local obj:TWorldObject = EachIn list
...
Next
Next


Damit ist auch kein Eintrag doppelt vorhanden, was dir kompliziertes Gelösche erspart.
Gewinner der 6. und der 68. BlitzCodeCompo

marcel_bohn

BeitragDi, Jul 09, 2013 14:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Genial Smile etwas in die Richtung hab ich gesucht! Hab noch nie darüber gedacht "eachin" auf diese Weise zu benutzen, jetzt muss ich nur leider einiges umprogrammieren xD.
Wenn ich das nächste Spiel beginne werde ich es vorher besser durchdenken... Wenn ich nur daran denke wie ich das Spiel auf BB programmiert hatte Shocked ich hatte alles verworfen als ich mir Bmax gekauft hab. Danke für eure Hilfe Smile bin eben ein Amateur

ChaosCoder

BeitragDi, Jul 09, 2013 20:24
Antworten mit Zitat
Benutzer-Profile anzeigen
marcel_bohn hat Folgendes geschrieben:
Wenn ich das nächste Spiel beginne werde ich es vorher besser durchdenken...
Dieser Spruch ist bei Entwicklern übrigens sehr beliebt. Auch beim nächsten Projekt wirst du etwas lernen, was du dann beim nächsten Mal auf jeden Fall von Anfang an machst. Ich hab den bisher bei (fast) all meinen Projekten gebracht Very Happy

Schwierig wird's nur, wenn man zu viel nachdenkt und gar nicht mehr weiß, wie man anfangen soll, weil einen das durchdachte, hochkomplexe System quasi erschlägt. *Aus eigener Erfahrung sprech*
Projekte: Geolaria | aNemy
Webseite: chaosspace.de

DAK

BeitragDi, Jul 09, 2013 20:30
Antworten mit Zitat
Benutzer-Profile anzeigen
ChaosCoder hat da definitiv recht.

Was bei Projekten aber sehr hilft, ist sich zuerst hinzusetzen, und alles halbwegs durchzuplanen, vor allem auch die technische Seite, also verwendete Datenstrukturen und Typen und so.

Wärend dem Programmieren sieht man dann zwar oft, das manches nicht so geht, wie man sich es gedacht hat, oder so keinen Sinn macht, aber es ist immer besser einen Plan zu haben, als keinen.
Gewinner der 6. und der 68. BlitzCodeCompo

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group