BlitzArray oder Dim

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

StarGazer

Betreff: BlitzArray oder Dim

BeitragMi, Dez 08, 2004 19:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo allerseits

Ich benutze sehr oft eindimensionale Dims
-> Dim Enemy(99)

Es stellt sich mir oft die Frage ob da BlitzArrays besser wären
-> Global Enemy[99]

Was benutzt ihr denn da ?
Sind BlitzArrays besser als Dim, vielleicht schneller bei der Abfrage ?
oder haben sie doch irgendwelche Nachteile ?

Welche der beiden Arten ist denn sinnvoller ?
 

Apocalyptic

BeitragMi, Dez 08, 2004 20:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Onlinehilfe hat Folgendes geschrieben:
Blitzarray's hören sich schneller an - sind aber genau so schnell wie DIM-Felder. Außer Integer-Array's können aber auch Float- oder String-Array's definiert werden. Das Kennzeichen (%, # oder $) kann aber stets nur bei der Definition mit LOCAL oder GLOBAL angegeben werden. Weiterhin haben Blitzarray's gegenüber den DIM-Feldern folgende Vor- und Nachteile:

Nachteile
-Blitzarray's können in der Größe nicht verändert werden.
-Blitzarray's können nur eindimensional sein.

Vorteile
-Blitzarray's lassen sich global und lokal definieren.
-Blitzarray's können als TYPE-Eigenschaft verwendet werden:

TYPE test
FIELD x
FIELD y
FIELD image[11]
END TYPE

-Blitzarray's können an Funktionen übergeben werden:

TEST1()

FUNCTION TEST1()
LOCAL array[10]
TEST2(array)
PRINT array[7]
END FUNCTION

FUNCTION TEST2(abc[10])
abc[7]=123
END FUNCTION


Mehr gibts da eigentlich nicht zu sagen...
Suum cuique

[ www.ffs-net.de.vu ] [ Raycaster ]
 

Dreamora

BeitragMi, Dez 08, 2004 20:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Beide haben ihre eigene Anwendung:

DIMs sind global und können multidimensional sein

BlitzArrays können nur 1dimensional sein. Dafür können sie in Types verwendet werden, als auch bei Funktionsaufrufen übergeben werden.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

sbrog

BeitragMi, Dez 08, 2004 20:49
Antworten mit Zitat
Benutzer-Profile anzeigen
und blitzarrays können by reference übergeben werden
 

Timo

BeitragDo, Dez 09, 2004 1:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
blitzarrays können by reference übergeben werden

wie geht das? bzw. geht das auch mit normalen Variablen? Ich dachte bis jetzt, man kann alles in BB nur by Value übergeben...

StarGazer

BeitragDo, Dez 09, 2004 18:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke

Wie es aussieht kann ich also bei meiner alten Gewohnheit bleiben, und weiterhin eindimensionale Dims benutzen.


-----------------------------------------------------------------------
wuste garnicht das man Dims nachhinnein noch vergrößern kann, jedenfalls wüste ich nicht wie.


Arrays Funktionsaufrufen übergeben werden ?

TEST2(abc)

FUNCTION TEST2(abc[10])
abc[7]=123
END FUNCTION

ist das dann so richtig ?, werden dann an die FUNCTION TEST2 alle ABC BlitzArraywerte übergeben ?, und man kann sie dann auslesen ?
 

Klaas

BeitragDo, Dez 09, 2004 19:53
Antworten mit Zitat
Benutzer-Profile anzeigen
bissel OT aber ...
Arrays, egal ob normales oder Blitzarray sind recht langsam.

Types und Banks sind um ein vielfaches schneller.
 

Apocalyptic

BeitragDo, Dez 09, 2004 20:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Arrays sollen langsamer als Types sein o_O ?

Eher im Gegenteil...
Suum cuique

[ www.ffs-net.de.vu ] [ Raycaster ]
 

Klaas

BeitragDo, Dez 09, 2004 21:33
Antworten mit Zitat
Benutzer-Profile anzeigen
oops ... sorry, hatte hier irgendwie falsch gemessen!

weiß nicht wie ich so daneben liegen konnte Embarassed *kratz am Kopf

hier zumindest ein Speedtest
Code: [AUSKLAPPEN]

size = 1024 * 1024 * 4

Type ding
   Field b
End Type
Dim a(size)

;----------------
t1 = MilliSecs()
For i=0 To size-1
   a(i) = i
Next
For i=1 To size
   b = a(i)
Next
Print ("Array: "+Int(MilliSecs() - t1))
Delay(300)

For i=1 To size
   ding.ding = New ding
Next
;----------------
t1 = MilliSecs()
For ding.ding = Each ding
   ding\b = i
Next
For ding.ding = Each ding
   b = ding\b
Next
Print ("Types: "+Int(MilliSecs() - t1))
Delay(300)

bank = CreateBank(size*4)
;----------------
t1 = MilliSecs()
For i=0 To size-1
   PokeInt(bank,i*4,i)
Next
For i=0 To size-1
   b = PeekInt(bank,i*4)
Next
Print ("Bank: "+Int(MilliSecs() - t1))
Delay(300)

;----------------
t1 = MilliSecs()
Local bb[4194304] ;ist 1024*1024*4

For i=1 To size
   bb[i] = i
Next
For i=1 To size
   b = bb[i]
Next
Print ("Blitzarray: "+Int(MilliSecs() - t1))


WaitKey
End
 

Timo

BeitragDo, Dez 09, 2004 22:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
bank = CreateBank(size*4)


ich glaub damit machst du die Bank zwar genau so groß, aber dannach fängt deine Schleife mit

Zitat:
For i=0 To size-1


an, was bedeutet, das er alles 4 mal so oft durchrattert...

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragDo, Dez 09, 2004 22:36
Antworten mit Zitat
Benutzer-Profile anzeigen
da alles *4 gerechnet wird geht er nur 1 mal duch die Bank wegen der Integer(4Byte)
das -1 muß sein da sonst die Bank zu klein ist!
[BB2D | BB3D | BB+]

sbrog

BeitragSo, Dez 12, 2004 15:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Timo hat Folgendes geschrieben:
Zitat:
blitzarrays können by reference übergeben werden

wie geht das? bzw. geht das auch mit normalen Variablen? Ich dachte bis jetzt, man kann alles in BB nur by Value übergeben...


so zum Beispiel :

Code: [AUSKLAPPEN]

Global array[10]

schreibe_100_in_ersten_wert(array)

Print array[1]


Function schreibe_100_in_ersten_wert(feld[10])
feld[1] = 100
End Function





Das ganze ist aber ziemlich krampfhaft. Zum Beispiel geht diese Funktion oben nur mit arrays, die genau 10 werte hat. Aber es ist eine By Reference Übergabe, Sie ist nur nicht wirklich zu gebrauchen Very Happy
(Wenn doch,klärt mich auf)
 

Timo

BeitragSo, Dez 12, 2004 15:51
Antworten mit Zitat
Benutzer-Profile anzeigen
achso, nein ich hatte eigentlich an so etwas wie in delphi gedacht, so hat das ja wenig sinn Wink

Code: [AUSKLAPPEN]
Procedure TForm1.TueWas(Var x:integer);
begin
  x := 3;
end;


gut, das mit den arrays ist zwar auch call by reference, aber was mir eigentlich an BB fehlt, ist, das man auch normale integer-Variablen by reference übergeben kann... Smile

@Rallimen: Ups, falsch geguckt Embarassed

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group