GLBasic forum

Other languages => GLBasic - de => Topic started by: knut on 2008-Sep-08

Title: frage zu arrays
Post by: knut on 2008-Sep-08
ich hab da mal eine grundlegende frage.
und zwar möchte ich eine wirtschaftssim ala siedler beginnen, oder eher ein aufbauspiel.

nun werden ja in einem solchen häuser bzw. produktionsstätten aller art benötigt.

wie realisiert man solche mittels eines arrays bzw. es werden ja mal mehr mal weniger benötigt, beim abreißen zum beispiel.

hat jemand ein kurzes code beispiel für so etwas?
Title: Re: frage zu arrays
Post by: Quentin on 2008-Sep-08
denke, du könntest für dieses Ansinnen mit TYPE's beschäftigen. Dort könntest du dür jede Tile deines Spielfeldes die Koordinaten, Begehbarkeit, Bebaubarkeit etc, und welche Objekte sich darauf befinden, sichern. Für sowas wären dann vermutlich mehrere Layer für das Spielfeld sinnvoll.

Peejay hat dazu auch mal ein ganz nettes Tutorial gemacht.

http://www.glbasic.com/forum/index.php?topic=1568.0

in englisch, aber trotzdem gut verständlich. hoffe das hilft dir weiter
Title: Re: frage zu arrays
Post by: Schranz0r on 2008-Sep-08
http://www.glbasic.com/forum/index.php?topic=790.0

Title: Re: frage zu arrays
Post by: Heiko on 2008-Sep-21
Nich hauen, aber ich hab mich bisher mit Types nur teilweise beschäftigt, und würde gern wissen, ob jemand mal bei diesem blitzcode helfen könnte?

Code (glbasic) Select
Type Vector4D
Field x# = 0.0, y# = 0.0, z# = 0.0, w# = 1.0
End Type


und

Code (glbasic) Select
Function xSetPostEffectVector(pe%, name$, vec.Vector4D)
DLL_xSetPostEffectVector(pe%, name$, vec\x#, vec\y#, vec\z#, vec\w#)
End Function


sooo compiliert es korrekt, aber ist das richtig so?

Code (glbasic) Select
TYPE Vector4D
x = 0.0
y = 0.0
z = 0.0
w = 1.0
ENDTYPE
GLOBAL vect AS Vector4D


und

Code (glbasic) Select
FUNCTION xSetPostEffectVector: pe, name$, vect
INLINE
  name_Str.Alloc(512);
  wxSetPostEffectVector(pe,name_Str.GetStrData(),vect.x,vect.y,vect.z,vect.w);name_Str.CalcLen();
ENDINLINE
ENDFUNCTION
Title: Re: frage zu arrays
Post by: Quentin on 2008-Sep-21
ich kenne mich jetzt mit Blitz nicht so dolle aus, aber wenn mit vec.Vector4d der komplette Type übergeben werden soll, dann müsste deine entsprechende GLBasic Funktion so aussehen

FUNCTION xSetPostEffectVector: pe, name$, vect AS Vector4D

Title: Re: frage zu arrays
Post by: Heiko on 2008-Sep-21
wenn ich das zu beginn gleich mit global mache, ist das nicht das gleiche?
es handelt sich um 4 funktionen, welche auf dieses Vector4D Type zugreifen.

Alle gleich aufgebaut...
Title: Re: frage zu arrays
Post by: Quentin on 2008-Sep-21
ähh nicht ganz glaube ich,

da du "vect" global machst, bekommst du vermutlich keine Fehlermeldungen vom Compiler, wobei ich mich frage, woher der Compiler das weiß, daß du hier die Struktur meinst.

mit "vect" in der Funktionsdeklaration übergibst du normalerweise nur eine float-Variable und keinen Verweis auf die Struktur. Andererseits, wenn du "vect" eh GLOBAL machst, wieso übergibst du es dann der Funktion? Ist doch dann eh dort bekannt.

Ich bin ehrlich gesagt etwas verwirrt, daß du keine Fehlermeldungen bekommst, wenn du dieses Coding compilierst. Vielleicht kann Gernot da näheres zu sagen.
Title: Re: frage zu arrays
Post by: Kitty Hello on 2008-Sep-22
Quote from: Heiko on 2008-Sep-21
Code (glbasic) Select
Type Vector4D
Field x# = 0.0, y# = 0.0, z# = 0.0, w# = 1.0
End Type

Function xSetPostEffectVector(pe%, name$, vec.Vector4D)
DLL_xSetPostEffectVector(pe%, name$, vec\x#, vec\y#, vec\z#, vec\w#)
End Function


GLBasic Äquivalent:
Code (glbasic) Select

TYPE TVector4D // immer mit T anfangen. Tip von Schranz0r, den ich jetzt beherzige ;)
  x=0; y=0; z=0; w=1
ENDTYPE

// pe% geht nur in Version 6 und höher!
// sonst halt "pe" schreiben.
FUNCTION xSetPostEffectVector(pe%, name$, vae AS TVecotr4D)
   DLL_xSetPostEffectVector(pe, name$, vec.x, vec.y, vec.z, vec.w);
ENDFUNCTION
Title: Re: frage zu arrays
Post by: Heiko on 2008-Sep-22
du meinst....

Code (glbasic) Select
TYPE TVector4D // immer mit T anfangen. Tip von Schranz0r, den ich jetzt beherzige ;)
  x=0; y=0; z=0; w=1
ENDTYPE

// pe% geht nur in Version 6 und höher!
// sonst halt "pe" schreiben.
FUNCTION xSetPostEffectVector pe , name$, vec AS TVector4D
   DLL_xSetPostEffectVector(pe, name$, vec.x, vec.y, vec.z, vec.w);
ENDFUNCTION
Title: Re: frage zu arrays
Post by: Schranz0r on 2008-Sep-22
pe% sagt nur das es ein Integer ist... aber geht erst in Version 6 !

Also nochmal zur Erklärung:

Var% = Integer
Var# = Float
Var$ = String // Wie immer ^^
Var = DGInt // Egal ob Float oder Integer... verbraucht aber auch mehr Speicher!

Wenn man richtig mit den Zuweisungen umgeht, kann man einiges an Leistung noch in GLBasic rausholen... up to 50% mehr :) ( Test von Gernot auf den GP2X ! )
Title: Re: frage zu arrays
Post by: Heiko on 2008-Sep-22
Jo mir ging es im vorherigen post nur um tipfehler/klammern usw.
Title: Re: frage zu arrays
Post by: WPShadow on 2008-Sep-22
Also auf's 6er Update bin ich echt gespannt. Wenn das raus kommt, dann brenne ich mir das auf eine CD, stelle mir eine Kerze drauf, puste sie dann aus und wünsche mir was! Das wird wie Geburtstag & Weihnachten zusammen... =D