frage zu arrays

Previous topic - Next topic

knut

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?

Quentin

#1
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

Schranz0r

I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

Heiko

#3
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

Quentin

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


Heiko

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

Quentin

ä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.

Kitty Hello

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

Heiko

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

Schranz0r

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 ! )
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

Heiko

Jo mir ging es im vorherigen post nur um tipfehler/klammern usw.

WPShadow

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
AMD X2 4600, 2 GB Ram, ATI X1950 XTX, XP PRO SP2: GLB Premium 10.beta_dingsi, <(´.´<) Kirby Dance (>`.`)>
http://lostrevenant.blogspot.com
alea iacta est