Verschiedene Typefields über Array verwalten
Übersicht

KrischanBetreff: Verschiedene Typefields über Array verwalten |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich habe ein grosses Typefield, welches ein Sternenfeld mit tausenden Einträgen speichert:
Code: [AUSKLAPPEN] Type star
Field entity% Field x#,y#,z# End Type Jetzt habe ich mir gedacht das ganze mittels eines dreidimensionalen Arrays zu unterteilen. Die Sterne befinden sich insgesamt in einer Entfernung von 0...50 auf jeder Achse, dann könnte man doch 5x5x5=125 "Sub"types erstellen, die jeweils einen 10x10x10 Units grossen Sektor repräsentieren, der dann über den jeweiligen Arrayeintrag angesprochen und dessen Sterne dann einzeln durchgegangen werden können. Die Sterne werden eingangs alle auf einmal erzeugt und dann mittels der Position den einzelnen Types zugeordnet. Wenn sich die Kamera dann später bewegt, sollen nur die Typefields in dem Sektor, in dem sich die Kamera befindet durchgegangen werden. Beispiel: Kamera ist in Sektor 2,4,1, dann soll man nur die Sterne des dortigen Types einfach mit For...Each durchgehen können, evt. auch die 8 umliegenden Sektoren. Wie macht man das? Ich stehe hier gerade auf dem Schlauch. |
||
Matthias |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hay. Dazu müstest du die Type Handles nummer in einer Bank speichern.
Und dann die einzelnen Banken durch gehen. Da mann Banken verkleinern oder vegrößern kann können auch alle Sektoren unterschiedlich viele Sterne haben. |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ausgehend von diesem System:
BlitzBasic: [AUSKLAPPEN] Type star Erstellst du alle deine Sterne, mit Sx/Sy/Sz den Sektor Koordinaten. Beim erstellen sortierst du die Typeeinträge nach Sektoren, d.h. im Array ist auf Sektoren.star(0,2,0) der erste Eintrag mit den Sektor-Koordinaten 0,2,0 - diese Instanz kannst du direkt ansprechen. Wenn du einen anderen Stern aus dem Sektor brauchst, gehst du mit After ![]() So hast du Fixpunkte in der Liste und musst nicht alle Instanzen durchgehen. Nachtrag: In etwa so: BlitzBasic: [AUSKLAPPEN] Type TStar |
||
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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
Krischan |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Xeres hat Folgendes geschrieben: Ausgehend von diesem System
Sei mir net bös, Xeres, aber ich raff es immer noch nicht. Dein Beispiel ist eindimensional, wie sähe das denn mehr/dreidimensional aus? Ich weiss nicht ob das evt. nur im Bmax realisierbar ist, im Pseudocode schwebt mir zumindest so etwas vor (nicht lauffähig und syntaktisch verkehrt, aber so in etwa): Code: [AUSKLAPPEN] ; type eines sterns
Type star Field name$,x#,y,z# End Type Dim Sektoren(10,10,10) ; Aufbau For i=1 To 10000 x=Rnd(100) y=Rnd(100) z=Rnd(100) sx=Int(x/10.0) sy=Int(y/10.0) sz=Int(z/10.0) ; Stern zum jeweiligen Sektor hinzufügen (irgendeine Funktion die das macht) AddStarToSector(sx,sy,sz,"Stern "+i,x,y,z) Next ; bestimmten Sektor auswählen temp=GetSector(2,3,6) ; nur die Sterne des Sektors ausgeben For t.temp = Each temp Print t\name+": "+t\x+","+t\y+","+t\z Next |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: wie sähe das denn mehr/dreidimensional aus? Nun - fast genauso. Der Pseudocode geht ja schon in die richtige Richtung.
BlitzBasic: [AUSKLAPPEN] ; bestimmten Sektor auswählen Das kann so mit BB nicht gehen - Du hast ein Type "star" und jeder Stern den du erstellst, wird in dessen Globale liste eingetragen. Darum muss man beim erstellen die Sterne gleich die passenden Sektoren zusammen sortieren. Den ersten Stern im Sektor kann man direkt aus dem Array bekommen, den Rest muss man per After weiterschalten, und aufhören, wenn die Koordinaten eines anderen Sektors erreicht wurden (oder das ende der Type-Liste erreicht wurde: NULL). Nachtrag: Selbes Beispiel in 3D BlitzBasic: [AUSKLAPPEN] Type TStar ListStarsOfSektor kann etwas mit den Sternen eines bestimmten Sektors anstellen - aber es ist nicht möglich, eine Separate liste für Sektoren o.ä. zu erstellen. Nachtrag2: Okay - man könnte auch einen solchen Workaround verwenden, wenn man unbedingt eine Type Liste mit Speziellen Sternen braucht: BlitzBasic: [AUSKLAPPEN] Type TStar Ich bezweifle aber, dass das besonders effizient oder flexibel ist... |
||
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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
Krischan |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ahhhh das erste Beispiel sieht gut aus - damit kann ich weiter herumspielen, danke! Ist auch sehr schnell, der zieht die Liste quasi in Echtzeit aus dem Typefield, hab mal 10.000.000 Sterne ohne Textausgabe versucht, höchstens 1ms, wow ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group