Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
tim.vogt

Anmeldungsdatum: 01.03.2009 Beiträge: 56
|
Verfasst am: 04.03.2009, 18:15 Titel: Alle "Objekte" eines Types durchlaufen |
|
|
Hi,
Ich habe ein mehr oder weniger großes Problem (bzw. eine Unschönheit, da man ja sonst alles manuell schreiben muss). Die SuFu hat leider nichts erbracht.
Ich benutze bei meinen jetzigen FB-Projekt UDT, nun möchte ich aber alle Bewegungen der verschieden "Objekte" der jeweiligen UDTs berechnen und dann die Sprites verschieben. Wie aber kann ich aber alle "Objekte" eines UDTs nacheinander in einer Schleife (am tollsten wäre mMn for) durchlaufen, um die Position anhand der Geschwindigkeit zu berechnen und die Sprites zu bewegen.
Sonst wäre mein Programm ja recht unflexibel, da ich je nach Level nur die bestimmten "Objekte", die vorhanden sind, manuell durchlaufen müsste, was auch etwas viel sinnlosen Code hinzufügen würde.
btw., mwf ist besser als phpBB. |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 04.03.2009, 19:07 Titel: Re: Alle "Objekte" eines Types durchlaufen |
|
|
Hallo!
tim.vogt hat Folgendes geschrieben: | Ich benutze bei meinen jetzigen FB-Projekt UDT, nun möchte ich aber alle Bewegungen der verschieden "Objekte" der jeweiligen UDTs berechnen und dann die Sprites verschieben. Wie aber kann ich aber alle "Objekte" eines UDTs nacheinander in einer Schleife (am tollsten wäre mMn for) durchlaufen, um die Position anhand der Geschwindigkeit zu berechnen und die Sprites zu bewegen.
Sonst wäre mein Programm ja recht unflexibel, da ich je nach Level nur die bestimmten "Objekte", die vorhanden sind, manuell durchlaufen müsste, was auch etwas viel sinnlosen Code hinzufügen würde. |
Wenn du die UDT-Variablen als Array vorliegen hast, kannst du dieses natürlich mit einer Schleife "abwandern":
Code: | Type tGegner
x As Integer
y As Integer
Gemeinheitsfaktor As Single
Geschwindigkeit As Single
End Type
Dim Shared Gegner(1 to 10) As tGegner
For i As Integer = Lbound(Gegner) To Ubound(Gegner)
Print Gegner(i).X
Next i |
Hast du die Variablen aber alle "einzeln" deklariert, geht das nicht:
Code: | Type tGegner
x As Integer
y As Integer
Gemeinheitsfaktor As Single
Geschwindigkeit As Single
End Type
Dim Terrorknolle As tGegner
Dim Seuchenkurbel As tGegner
Dim Gifthoernchen As tGegner |
Zitat: | btw., mwf ist besser als phpBB. |
mwf?
Viele Grüße!
Sebastian _________________
Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
 |
tim.vogt

Anmeldungsdatum: 01.03.2009 Beiträge: 56
|
Verfasst am: 04.03.2009, 19:17 Titel: |
|
|
Hi,
Und danke für die Antwort.
Das heißt also, dass wenn ich alle "Objekte" als Elemente eines Array erstelle, so kann ich den Array durchlaufen um die "Objekte" nacheinander aufzurufen.
Nun, ich könnte noch immer den Code map-"unabhängiger" machen, wenn ich die Elemente des Arrays in eine externe .txt-Datei speichere und dann lade, oder ist soetwas nicht möglich?
mwf. _________________ "Nichts ist wahrhaftig und alles ist erlaubt."
Zuletzt bearbeitet von tim.vogt am 05.03.2009, 16:52, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
 |
Hawkins
Anmeldungsdatum: 14.03.2009 Beiträge: 5
|
Verfasst am: 14.03.2009, 16:09 Titel: |
|
|
Hallo.
Ich habe das gleiche "Problem".
Wenn man die Objekte in einem Array anlegt, kann man die zwar wunderbar durchlaufen, aber wenn ich ein Objekt löschen will, wie mache ich das? da verbleibt dann eine lücke.
ich habe erst mit freebasic angefangen, davor habe ich mich für blitzbasic interessiert.
dort kann man Objekte mit new anlegen und in eienr for .. each .. schleife alle objekte durchlaufen. dabei ist es eben auch möglich, einzelene objekte zu löschen.
gibts es eine ähnliche möglichkeit in freebasic? wenn nein,w as wäre die alternative? extra eine liste anlegen (jedes objekt enthält pointer auf nächstes objekt) würde den code wieder umständlicher und unübersichtlicher machen.
liebe grüße |
|
Nach oben |
|
 |
tim.vogt

Anmeldungsdatum: 01.03.2009 Beiträge: 56
|
Verfasst am: 14.03.2009, 16:51 Titel: |
|
|
Wieso willst du ein Objekt löschen, du könntest doch einfach das Objekt überspringen, wenn es einen bestimmten Wert hat. _________________ "Nichts ist wahrhaftig und alles ist erlaubt." |
|
Nach oben |
|
 |
Hawkins
Anmeldungsdatum: 14.03.2009 Beiträge: 5
|
Verfasst am: 14.03.2009, 17:09 Titel: |
|
|
Sollen aber ständig neue Objekte erstellt werden und andere wieder zerstört werden, dann würde ja das array immer größer werden.... |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
 |
Weazle25
Anmeldungsdatum: 04.11.2007 Beiträge: 18 Wohnort: Stralsund (Mecklenburg-Vorpommern)
|
Verfasst am: 14.03.2009, 17:44 Titel: |
|
|
Hawkins hat Folgendes geschrieben: | Sollen aber ständig neue Objekte erstellt werden und andere wieder zerstört werden, dann würde ja das array immer größer werden.... |
Da empfiehlt sich eine doppelt verkettete Liste.
Eine "servierfertige" dlList findest du hier.
822->Collection.bi und
823->Collection.bas - die zugehörige Demo.
Gibt dort aber noch andere Listen-Typen.
Ich habe mir noch nicht alle Codes dort angesehen.
Vielleicht ist da ja ein Code bei der genau das macht was du willst.
Gruss
Weazle |
|
Nach oben |
|
 |
Hawkins
Anmeldungsdatum: 14.03.2009 Beiträge: 5
|
Verfasst am: 14.03.2009, 18:09 Titel: |
|
|
Ahh ja, das ist eigentlich ganz annehmbar Sebastian, dass die Lücken wieder aufgefüllt werden.
Das mit der doppelverketteten Liste ist dann doch wieder zu aufwändig, Weazel, aber vom pronzip her ok.
Schade ich hatte gehofft, es gäbe in Freebasic eine fertige 'Struktur' wie in Blitzbasic. Aber da hilft dann wohl nix ausser selbst was zu stricken. oder aber komplizierte vorlagen verwenden... |
|
Nach oben |
|
 |
Weazle25
Anmeldungsdatum: 04.11.2007 Beiträge: 18 Wohnort: Stralsund (Mecklenburg-Vorpommern)
|
Verfasst am: 14.03.2009, 18:33 Titel: |
|
|
Hawkins hat Folgendes geschrieben: | Schade ich hatte gehofft, es gäbe in Freebasic eine fertige 'Struktur' wie in Blitzbasic. |
Was meinst Du wohl wie es in BB gemacht wird?
Dort funktioniert es genauso wie mit meiner Collection.bi.
Nur ist die dlList bei BB in die Engine intigriert und somit für den BBler nicht sichtbar.
Und die Type-Strukturen bei BB sind nur einfache Records (UDT's) die automatisch von BB in dieser Liste verwaltet werden.
Es ist eben das gleiche Prinzip nur ist diese Struktur bei BB sogar noch deutlich komplexer.
Gruss
Weazle |
|
Nach oben |
|
 |
Hawkins
Anmeldungsdatum: 14.03.2009 Beiträge: 5
|
Verfasst am: 14.03.2009, 21:02 Titel: |
|
|
ja dass das prinzip gleich ist, denk ich mir schon. dadurch das es dort schon integriert ist, ist der umgang damit 'übersichtlicher'.
inwiefern komplexer? bei bb müsste es ne Liste sein mit Zeiger vom Nachfolger UND Vorgänger, meinst du das? |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
 |
Hawkins
Anmeldungsdatum: 14.03.2009 Beiträge: 5
|
Verfasst am: 14.03.2009, 21:20 Titel: |
|
|
Ja das stimmt. ist auch ein sehr schönes tutorial. als wenn es wirklich nicht so wie bei blitzbasic machbar ist, dann werd ich es wohl auch so machen, falls ich lust habe.
ich bin ja schon am zweifeln, ob ich überhaupt mein altes blitz-programm neu in freebasic schreiben soll...
ich dachte ich setze es in freebasic um und fange manches nochmal neu an mit nem besseren ansatz und ner erweiterten physik.
(es ging damals um das hier: http://www.blitzforum.de/forum/viewtopic.php?t=27233) |
|
Nach oben |
|
 |
|