Mal wieder ein Problem mit types
Übersicht

timo_81Betreff: Mal wieder ein Problem mit types |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi , ich habe versucht meine Objekte als Types zusammenzufassen
aber irgendwas muss ich wohl flaschgemacht habe hier mal die wichtigsten Fragmente aus meinem Code dazu: Der Zufallsgenerator ist natürlich am Anfang deklariert worden. Wenn ich den ganzen Code reinstellen soll bitte sagen [syntax="bb"] ... ;-------------------------- ;MONDE ;-------------------------- Type mond Field menge ;Abbaumenge ( Resourcen ) Field groesse ; Größe beeinflusst resourcen Field X Field Y Field Z End Type ;------------------------- ;Planeten ;------------------------- Type planet Field kolonisiert ;Wurde er schon kolonialisiert , na dann kannst losgehen ![]() Field groesse ;Größe kann variieren , und somit auch der Platz für Gebäude Field bewohnbar ;Ist er überhaupt bewohnbar? Field textur ;eine Nummer die dann eine textur zuweist Field X Field Y Field Z End Type ;----------------------------------------------------------------- ;Festelegen der Daten für die Planeten und Monde ;----------------------------------------------------------------- Global anzahl_planeten=Rand(3,5) Global anzahl_monde=Rand(2-5); Dim objekt.planet(anzahl_planeten) ; Legt 3-5 Planeten an Dim objekt.mond(anzahl_monde) ; Legt 2-5 Monde an planet_kolonisiert=0 ; Anfangs nicht kolonisiert ;------------------------------------------------------------------- ;Zufallswerte für die EINZELNEN Planeten ;------------------------------------------------------------------- For i=1 To anzahl_planeten groesse_planet=Rand(0.4,2.0);Zufalls-faktor für ScaleEntity planet_bewohnbar=Rand(0,1) ;1: bewohnbar , 2: unbewohnbar planet_textur=Rand(1,5) ; fünf verschieden Texturen für Planeten sind möglich Planet_X=rand(-2000,2000) ;Zufallskoordinaten der Planeten Planet_Y=rand(-200,200) Planet_Z=rand(-2000,2000) ;Erzeugung und Eintragen der Werte objekt.planet(i) = New planet ;Neuen Planeten erzeugen objekt\planet(i)\kolonisiert=planet_kolonisiert objekt\planet(i)\groesse=groesse_planet ;Größe kann variieren , und somit auch der Platz für Gebäude objekt\planet(i)\bewohnbar=planet_bewohnbar ;Ist er überhaupt bewohnbar : 1-> Ja , 0-> Nein? objekt\planet(i)\textur=planet_textur ;eine Nummer die dann eine textur zuweist objekt\planet(i)\X=Planet_X ;Planeten werden zufällig plaziert objekt\planet(i)\Y=Planet_Y ;"" objekt\planet(i)\Z=Planet_Z;"" Next ;----------------------------------------------------------------------------- ;Zufallswerte für die EINZELNEN Monde ;----------------------------------------------------------------------------- For k=1 To anzahl_monde groesse_mond=Rand(0.4,2.0) ;Zufalls-faktor für ScaleEntity bonus_mond=Rand(1000,12000) ;Wenn der Mond eine bestimmte Größe hat kommt der Wert zur Menge hinzu Mond_X=rand(-2000,2000) ;Zufallskoordinaten der Monde Mond_Y=rand(-200,200) Mond_Z=rand(-2000,2000) menge_mond=rand(2000,25000) ; Resourcenmenge ;Erzeugung und Eintragung der Werte objekt.mond(k) = New Mond objekt\mond(k)\groesse=groesse_mond ;Faktor für ScaleEntity objekt\mond(k)\menge=menge_mond ;Kommt später noch ein ein Bonus dazu wenn der Mond ;sehr groß ist ;Test ausgeben der Werte Color 255,255,255 For objekt.planet = Each planet Print "PLANETEN_DATEN:" Print "kolonisiert: " + objekt.planet\kolonisiert Print "ScaleFaktor: " + objekt.planet\groesse Print "bewohnbar: " + objekt.planet\bewohnbar Print "texturNr.: " + objekt.planet\textur Print "X: " + objekt.planet\X Print "Y: " + objekt.planet\Y Print "Z: " + objekt.planet\Z Print "Monddaten Print "ScaleFaktor: " + objekt.mond\groesse If objekt.mond\groesse <= 1.0 Then Print "Bonus : " + objekt.mond\bonus_mond Else Print "Kein Bonus. Mond zu klein." End if Print "Resourcen :" + objekt.mond\menge Print "X: " + objekt.mond\X Print "Y: " + objekt.mond\Y Print "Z: " + objekt.mond\Z Next ... [/syntax] gruß timo |
||
Knartz |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
*edit*
autsch, da war ich in c++ und nich in bb |
||
- Zuletzt bearbeitet von Knartz am Sa, Jan 28, 2006 14:29, insgesamt einmal bearbeitet
timo_81 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hi danke ,
aber der fehler kommt ab hier: objekt.planet(i) = New planet ;Neuen Planeten erzeugen error: expecting variable assignment |
||
Knartz |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
*edit* | ||
- Zuletzt bearbeitet von Knartz am Sa, Jan 28, 2006 14:28, insgesamt einmal bearbeitet
![]() |
preachie |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn schon, müsste es object(i).planet heißen.
Du möchtest ja ein Feld mit mehreren objects haben, aber der Type ist ja kein Feld. Gruß Preachie |
||
timo_81 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hi,
also nur objekt.planet?? objekt(i).planet geht nich objekt.planet(i) auch net greetz timo |
||
![]() |
preachie |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hmm, hab aktuell keine Möglichkeit selbst zu testen, doch laut Tutorial auf Blitzbase sollte das mit dem Feld funktionieren.
Hier der Beispiel-Code aus dem Tutorial: Code: [AUSKLAPPEN] Types lassen sich mit DIM-Feldern kombinieren. Dadurch bleibt jedes Objekt direkt ansprechbar. Dazu muss man ein DIM-Feld so definieren:
DIM {feldname}.{typename} (index) Mit NEW werden neue Objekte erstellt: {feldname} (index)=NEW {typename} Eigentlich ändert sich danach nur wenig, nur der Index wird ständig angegeben. Hier ein größeres Beispiel: TYPE tile FIELD image FIELD extra END TYPE DIM tile.tile(99,99) tile(0,0)=NEW tile tile(0,0)\image=0 tile(0,0)\extra=0 Vielleicht hilft es ja den Fehler zu finden, Gruß Preachie |
||
![]() |
preachie |
![]() Antworten mit Zitat ![]() |
---|---|---|
Öhm, was mir gerade noch aufgefallen ist,
Du deklarierst objekt einmal als planet und einmal als mond Code: [AUSKLAPPEN] Dim objekt.planet(anzahl_planeten) ; Legt 3-5 Planeten an
Dim objekt.mond(anzahl_monde) ; Legt 2-5 Monde an Ich bin selbst noch am Lernen von BB, aber ich denke mal, dass das nicht geht.... Dann eher: Code: [AUSKLAPPEN] Dim planet_objekt.planet(anzahl_planeten) ; Legt 3-5 Planeten an
Dim mond_objekt.mond(anzahl_monde) ; Legt 2-5 Monde an Und die entsprechenden weiteren Zeilen anpassen. Auch wenn Du die Type-Felder ansprichst, nicht planet_object.planet(i), sondern planet_objekt(i).planet verwenden! Gruß Preachie |
||
timo_81 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke für eure regen Beiträge.
Das mit dem Feld ist gefixt nun sagt er End Function without Function. Seid ich es mit Types und Funktionen eine wenig strukturiert habe kommt müll: Hier mal die gesamte Funktion...da ich langsam an mir zweifel: [code] Function Create_Planets_Ships() ;------------------------------------------------------------------- ;Zufallswerte für die EINZELNEN Planeten ;------------------------------------------------------------------- For i=1 To anzahl_planeten groesse_planet#=Rand(0.4,2.0);Zufalls-faktor für ScaleEntity planet_bewohnbar=Rand(0,1) ;1: bewohnbar , 2: unbewohnbar planet_textur=Rand(1,5) ; fünf verschieden Texturen für Planeten sind möglich Planet_X=rand(-2000,2000) ;Zufallskoordinaten der Planeten Planet_Y=rand(-200,200) Planet_Z=rand(-2000,2000) ;Erzeugung und Eintragen der Werte objekt.planet = New planet ;Neuen Planeten erzeugen objekt(i)\planet\kolonisiert=planet_kolonisiert objekt(i)\planet\groesse#=groesse_planet# ;Größe kann variieren , und somit auch der Platz für Gebäude objekt(i)\planet\bewohnbar=planet_bewohnbar ;Ist er überhaupt bewohnbar : 1-> Ja , 0-> Nein? objekt(i)\planet\textur=planet_textur ;eine Nummer die dann eine textur zuweist objekt(i)\planet\X=Planet_X ;Planeten werden zufällig plaziert objekt(i)\planet\Y=Planet_Y ;"" objekt(i)\planet\Z=Planet_Z;"" Next ;----------------------------------------------------------------------------- ;Zufallswerte für die EINZELNEN Monde ;----------------------------------------------------------------------------- For k=1 To anzahl_monde groesse_mond#=Rand(0.4,2.0) ;Zufalls-faktor für ScaleEntity bonus_mond=Rand(1000,12000) ;Wenn der Mond eine bestimmte Größe hat kommt der Wert zur Menge hinzu Mond_X=rand(-2000,2000) ;Zufallskoordinaten der Monde Mond_Y=rand(-200,200) Mond_Z=rand(-2000,2000) menge_mond=rand(2000,25000) ; Resourcenmenge ;Erzeugung und Eintragung der Werte objekt.mond = New Mond objekt(k)\mond\groesse#=groesse_mond# ;Faktor für ScaleEntity objekt(k)\mond\menge=menge_mond ;Kommt später noch ein ein Bonus dazu wenn der Mond ;sehr groß ist ;Test ausgeben der Werte Color 255,255,255 For objekt.planet = Each planet Print "PLANETEN_DATEN:" Print "kolonisiert: " + objekt.planet\kolonisiert Print "ScaleFaktor: " + objekt.planet\groesse# Print "bewohnbar: " + objekt.planet\bewohnbar Print "texturNr.: " + objekt.planet\textur Print "X: " + objekt.planet\X Print "Y: " + objekt.planet\Y Print "Z: " + objekt.planet\Z Print "Monddaten" Print "ScaleFaktor: " + objekt.mond\groesse# If objekt.mond\groesse# > 1.0 Then Print "Bonus : " + objekt.mond\bonus_mond ElseIf objekt.mond\groesse# <= 1.0 Then Print "Bonus : -" End If Print "Resourcen :" + objekt.mond\menge Print "X: " + objekt.mond\X Print "Y: " + objekt.mond\Y Print "Z: " + objekt.mond\Z Next End Function Create_Planets_Ships |
||
![]() |
preachie |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] objekt.planet = New planet ;Neuen Planeten erzeugen
Hier fehlt wieder das (i) hinter objekt. Wenn Du auf das objekt zugreifst, darfst Du nicht den Typen mit angeben... also nicht Code: [AUSKLAPPEN] objekt(i)\planet\kolonisiert=planet_kolonisiert
sondern Code: [AUSKLAPPEN] objekt(i)\kolonisiert=planet_kolonisiert
Die Ursache für die Meldung EndFunction without Function konnte ich jetzt auf die Schnell nicht in Deinem Code-Ausschnitt sehen... liegt möglicherweise auch noch in einem Bereich, den Du nicht mit gepostet hast. Außerdem ist die Variable objekt immer noch sowohl vom Typ planet, als auch vom Typ mond... wie gesagt, ich weiß es nicht genau, ob das überhaupt geht... ich bezweifel es eher ![]() Gruß Preachie |
||
KnartzBetreff: Upps ! |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
SORRY ICH HAB SCHEISSE GEBAUT !
Meine Hirnwindungen haben sich etwas zu stark verwunden ![]() Ich hab den Code auf C++ umgeschrieben ... ![]() So hier jetzt auf BB... und nochmals sorry *hab meine falschen posts geedited* wow, der richtige quellcode ist ja jetzt richtig kurz ![]() ::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ;----------------------------------------------------------------- ;Planeten ;----------------------------------------------------------------- Type planet Field kolonisiert ;Wurde er schon kolonialisiert , na dann kannst losgehen Smile Field groesse# ;Größe kann variieren , und somit auch der Platz für Gebäude Field bewohnbar ;Ist er überhaupt bewohnbar? Field textur ;eine Nummer die dann eine textur zuweist Field X,Y,Z End Type ;----------------------------------------------------------------- ;MONDE ;----------------------------------------------------------------- Type mond Field res_menge ;Abbaumenge ( Resourcen ) Field groesse# ; Größe beeinflusst resourcen Field textur Field X,Y,Z End Type ;----------------------------------------------------------------- ;Zusammenfassung von: ;Festelegen der Daten für die Planeten und Monde ;Zufallswerte für die EINZELNEN Planeten ;Zufallswerte für die EINZELNEN Monde ;----------------------------------------------------------------- Global anzahl_planeten = Rand(3,5) Global anzahl_monde = Rand(2,5) ;in diesem abschnitt werden die planeten gemacht ... alles wird direkt reingeschrieben ;man beachte die for-next schleife, damit wird eine liste gemacht, in die die ganzen planeten ;reinkommen - vorher waren es mehrere listen For temp_counter = 1 To anzahl_planeten planets.planet = New planet planets\groesse# = Rand(0.4,2.0) planets\bewohnbar = Rand(0,1) planets\textur = Rand(1,5) planets\x = Rand(-2000,2000) planets\y = Rand(-200,200) planets\z = Rand(-2000,2000) Next ;das selbe wie bei den planeten nur halt mir monden die in eine andere liste müssen For temp_counter = 1 To anzahl_monde monde.mond = New mond monde\groesse# = Rand(0.4,2.0) monde\res_menge = Rand(2000,25000) monde\textur = Rand(6,10) ;die sollen ja auch gut aussehen ![]() monde\x = Rand(-2000,2000) monde\y = Rand(-200,200) monde\z = Rand(-2000,2000) Next ;----------------------------------------------------------------- ;ausgeben der testwerte ;----------------------------------------------------------------- Color 255,255,255 For planets.planet = Each planet Print "PLANETEN_DATEN:" Print "kolonisiert: " + planets\kolonisiert Print "ScaleFaktor: " + planets\groesse Print "bewohnbar: " + planets\bewohnbar Print "texturNr.: " + planets\textur Print "X: " + planets\X Print "Y: " + planets\Y Print "Z: " + planets\Z Next For monde.mond = Each mond Print "Monddaten Print "ScaleFaktor: " + monde\groesse If monde\groesse <= 1.0 Then Print "Bonus von " + (monde\res_menge * 0.5) + "Ressourcen" Else Print "Kein Bonus. Mond zu klein." End If Print "Resourcen :" + monde\res_menge Print "X: " + monde\X Print "Y: " + monde\Y Print "Z: " + monde\Z Next |
||
Knartz |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
dim und index ist hier etwas stussig weil die man die types ja in einer liste speichert, da wäre (doppelt*doppelt)³ gemoppelt ...
monde.xyz ist ja die liste mit den xyzs (gilt auch für planeten.xyz) packt man da noch ein index ran wird für jeden planeten eine eigene liste mit der liste die nur den planeten hat gespeichert. das ist das selbe wie c:\games\tetris\tetris\tetris\... got milk ? |
||
timo_81 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
es geht danke.
no milh but vodka ![]() cheers timo |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group