Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Alle "Objekte" eines Types durchlaufen

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
tim.vogt



Anmeldungsdatum: 01.03.2009
Beiträge: 56

BeitragVerfasst am: 04.03.2009, 18:15    Titel: Alle "Objekte" eines Types durchlaufen Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 04.03.2009, 19:07    Titel: Re: Alle "Objekte" eines Types durchlaufen Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
tim.vogt



Anmeldungsdatum: 01.03.2009
Beiträge: 56

BeitragVerfasst am: 04.03.2009, 19:17    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 04.03.2009, 19:20    Titel: Antworten mit Zitat

tim.vogt hat Folgendes geschrieben:
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?

Das empfiehlt sich sogar. zwinkern
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Hawkins



Anmeldungsdatum: 14.03.2009
Beiträge: 5

BeitragVerfasst am: 14.03.2009, 16:09    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
tim.vogt



Anmeldungsdatum: 01.03.2009
Beiträge: 56

BeitragVerfasst am: 14.03.2009, 16:51    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Hawkins



Anmeldungsdatum: 14.03.2009
Beiträge: 5

BeitragVerfasst am: 14.03.2009, 17:09    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 14.03.2009, 17:34    Titel: Antworten mit Zitat

Hallo!
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....

Ich habe dazu auf die Schnelle ein kleines Beispiel erstellt: http://www.freebasic-portal.de/index.php?s=fbporticula&mode=show&id=826
Die Methode ist relativ einfach und schnell, da die Lücken zunächst bestehen gelassen werden, aber im Falle der erneuten Arrayerweiterung wieder aufgefüllt werden.
Am schönsten funktioniert das in FB aber mit einer verketteten Liste, die du ja schon als Option angeführt hattest.

Viele Grüße!
Sebastian
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Weazle25



Anmeldungsdatum: 04.11.2007
Beiträge: 18
Wohnort: Stralsund (Mecklenburg-Vorpommern)

BeitragVerfasst am: 14.03.2009, 17:44    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Hawkins



Anmeldungsdatum: 14.03.2009
Beiträge: 5

BeitragVerfasst am: 14.03.2009, 18:09    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Weazle25



Anmeldungsdatum: 04.11.2007
Beiträge: 18
Wohnort: Stralsund (Mecklenburg-Vorpommern)

BeitragVerfasst am: 14.03.2009, 18:33    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Hawkins



Anmeldungsdatum: 14.03.2009
Beiträge: 5

BeitragVerfasst am: 14.03.2009, 21:02    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 14.03.2009, 21:08    Titel: Antworten mit Zitat

Hallo!

Weazle25 hat Folgendes geschrieben:
Da empfiehlt sich eine doppelt verkettete Liste.

Als etwas eleganterer Unterbau für eine Sammelroutine mit Löschfunktion genügt meist auch bereits eine einfach verkettete Liste (FB-Tutorial), das ist dann noch mal etwas einfacher zu handlen.

Viele Grüße!
Sebastian
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Hawkins



Anmeldungsdatum: 14.03.2009
Beiträge: 5

BeitragVerfasst am: 14.03.2009, 21:20    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz