space invaders

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

N8mare

Betreff: space invaders

BeitragDi, Jan 11, 2005 10:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich bin momentan am rumfummeln wie ich mehr als einen schuss darstellen kann , wär gut wenn mir jemand dabei helfen könnte , icq : 217894513

danke schonma

Jan_

Ehemaliger Admin

BeitragDi, Jan 11, 2005 10:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Types
between angels and insects
 

gamble

BeitragDi, Jan 11, 2005 14:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Würde auch mit Dims gehen (siehe Renés Buch), Types sind aber um einiges eleganter.

Ebola33

BeitragDi, Jan 11, 2005 15:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Aber Dim Felder sind schneller, und einfacher vor allem für Anfänger.
(wenn auch nicht ganz so flexibel)
ansteckend... Wink
verstaubtes Projekt : http://www.mitglied.lycos.de/ebola33/
 

konstantin

BeitragDi, Jan 11, 2005 15:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Ebola33 hat Folgendes geschrieben:
Aber Dim Felder sind schneller


ich werd alt... bei arrays gehst du jedes mal das ganze array durch, und schaust, ob ein schuss aktiv ist. das ist wesentlich langsamer als tiles, wenn du mich fragst.

Waveblue

BeitragDi, Jan 11, 2005 15:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich würd auch Types nehmen!
Wenn man das einmal drauf hat, sind die Dinger äußerst praktisch Wink

wie soll das mit Dim-Feldern gehn?
kann ich mir ni vorstellen! Confused
This is 10% luck
20% skill
15% concentrated power of will
5% pleasure, 50% pain
and 100% reason to remember the name
 

ZhangHe2

BeitragDi, Jan 11, 2005 15:33
Antworten mit Zitat
Benutzer-Profile anzeigen
finde s mit dim umständlicher und ist auch eher für statische Sachen ,
und so schwer sind Types auch nicht , lernt man schnell

MfG Zhang

Ebola33

BeitragDi, Jan 11, 2005 15:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei types gehst du auch jedesmal durch.
Ok, schneller werden die erst wenn es sich um mehr als tausend objekte handelt. da merkt man dann den Unterschied. Da Types halt dynamisch sind.


Na mensch....

man hat für den schuss x und y koordinate.


dim schuss(Max_Schuss_Anzahl,1) ; 0=x, 1=y


for i=0 to Max_Schuss_Anzahl
schuss(i,0)=schuss(i,0)+1 ; horizontal
drawimage schussgrafik schuss(i,0),schuss(i,1)
next

Wo ist das Problem ?

edit : Aber ist wohl Geschmacksache, kommt auch auf den Verwendungszweck an.
ansteckend... Wink
verstaubtes Projekt : http://www.mitglied.lycos.de/ebola33/

Jan_

Ehemaliger Admin

BeitragDi, Jan 11, 2005 15:36
Antworten mit Zitat
Benutzer-Profile anzeigen
geht schon, und ja sie sind sogar, wenn man sie durchgehen muss schneller.
between angels and insects

Hubsi

BeitragDi, Jan 11, 2005 15:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Ebola33 hat Folgendes geschrieben:
Bei types gehst du auch jedesmal durch.
Sicher, aber was ist wenn Du 100 mögliche Schüsse haben willst und arbeitest mit Dim? Nehmen wir weiter an Du hast gerade 10 Schüsse rumflitzen. Jetzt ackert die Schleife 100 Einträge durch und prüft ob der Schuss überhaupt aktiv ist.

Mit Types gehe ich dabei nur zehn Einträge durch und prüfe nichts weiter und habe ganz nebenbei die Möglichkeit so viel oder wenig Schüsse anzulegen wie der Ram verkraftet Wink

Ich gehe jetzt erstmal biken, abends schreib ich noch einen Speedvergleich, mit 10 und 100 Einträgen, bin selbst schon gespannt auf das Ergebniss Very Happy
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

Ebola33

BeitragDi, Jan 11, 2005 16:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Da hast du recht hubsi, man muss halt abschätzen für welchen Verwendungszweck.

Ich gebe mich geschlagen Crying or Very sad
Aber vom Prinziep her sind Types langsamer, weil sie ja mit jedem neuen bzw. gelöschten eintrag neu dimensioniert werden müssen. Wink


Edit :
nur der nackte Zugriff ist langsamer, Okay
So steht es sogar in der Bibel Wink

Nach Möglichkeit sollen statt Type-Felder normale Dim-Felder benutzt werden. Die einfachen Felder sind 100% schneller - zudem kann ein Zugriff sofort erfolgen - dies bringt nochmals mehr Speed.
ansteckend... Wink
verstaubtes Projekt : http://www.mitglied.lycos.de/ebola33/
  • Zuletzt bearbeitet von Ebola33 am Di, Jan 11, 2005 17:30, insgesamt einmal bearbeitet

Hubsi

BeitragDi, Jan 11, 2005 17:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Brrr, ist doch kalt Very Happy Ich hab jetzt mal eben den Speedtest gemacht, ist recht interessant finde ich:Code: [AUSKLAPPEN]
Type test
End Type

Dim test(9999)

For a=1 To 1000 ; 1000 Einträge anlegen
t.test=New test
Next

time=MilliSecs() ; Array-Zeit messen
For a=0 To 9999
If test(a) irgendwas=toll
Next
Print "Array 10000: "+(MilliSecs()-time)

time=MilliSecs() ; Type-Zeit mit 1000 Einträgen messen
For t.test=Each test
Next
Print "Type mit 1000 Einträgen: "+(MilliSecs()-time)

Delete Each test ; Alle Einträge löschen
For a=1 To 10000 ; 10000 Einträge anlegen
t.test=New test
Next

time=MilliSecs()
For t.test= Each test ; Type-Zeit mit Vollauslastung messen
Next
Print "Type mit 10000 Einträgen: "+(MilliSecs()-time)

WaitKey()
End
Ich hab hier 14, 0, 7. Ich hätte nie gedacht das ein einfaches if, welches noch nicht einmal zutrifft, doch so relativ viel Zeit verschlingt (ist mir so nebenher aufgefallen). Very Happy Übrigens wird der Speicher bei Types nicht jedesmal neu dimensioniert, sondern der größte je gebrauchte Wert bleibt erhalten.

Edit: Natürlich ist es bei einer konstanten Datenmenge (wie z.B. einer Map) immer besser mit Arrays zu arbeiten, da sie in der Handhabung die Möglichkeit des direkten Zugriffs offen halten Wink
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

Ebola33

BeitragDi, Jan 11, 2005 17:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
Type test
End Type

Dim test(999999)

For a=1 To 999999 ; 1000 Einträge anlegen
t.test=New test
Next

time=MilliSecs() ; Array-Zeit messen
For a=0 To 999999
If test(a) =100 Then

EndIf
Next
Print "Array 10000: "+(MilliSecs()-time)

time=MilliSecs() ; Type-Zeit mit 1000 Einträgen messen
For t.test=Each test
Next
Print "Type mit 1000 Einträgen: "+(MilliSecs()-time)

Delete Each test ; Alle Einträge löschen
For a=1 To 999999 ; 10000 Einträge anlegen
t.test=New test
Next

time=MilliSecs()
For t.test= Each test ; Type-Zeit mit Vollauslastung messen
Next
Print "Type mit 10000 Einträgen: "+(MilliSecs()-time)

WaitKey()
End



Probier mal das, ich habe da 4,34,32....
Was sagst du nun ? Wink
ansteckend... Wink
verstaubtes Projekt : http://www.mitglied.lycos.de/ebola33/

Hubsi

BeitragDi, Jan 11, 2005 18:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Wow, ich bin überrascht Shocked

Beides je 1000000 Einträge
Debug: Array 1406, Type 812
ohne Debug: Array 15, Type 96

Es scheint so als ob die Debugfunktion massiven Einfluss auf Arrays hat (ich hatte beim vorherigen Test auch den Debug an). Ich muss mich bei Dir entschuldigen, da habe ich unbewusst Quatsch erzählt Embarassed
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

Spikespine

BeitragDi, Jan 11, 2005 18:19
Antworten mit Zitat
Benutzer-Profile anzeigen
ja ist mir auch aufgefallen

Ebola33

BeitragDi, Jan 11, 2005 21:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Macht ja nix 8)
Hab's ausprobiert, kannst noch 10 if then bedingungen mehr reinschreiben und ist trotzdem noch schneller.... Wink
ansteckend... Wink
verstaubtes Projekt : http://www.mitglied.lycos.de/ebola33/

Travis

BeitragDi, Jan 11, 2005 21:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich bezweifle, dass bei einem Space Invaders Remake dieser Geschwindigkeitsunterschied ins Gewicht fallen würde. Wink

Code: [AUSKLAPPEN]
Type schuss
 Field x,y,sx#,sy#,winkel,id
End Type


feddisch...
www.funforge.org

Ich hasse WASD-Steuerung.

Man kann alles sagen, man muss es nur vernünftig begründen können.
 

BIG BUG

BeitragMi, Jan 12, 2005 1:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Geschwindigkeitsunterschiede sind natürlich so gering, dass das bei solchen Fällen nicht unbedingt ausschlaggebend ist.

Hätte Ebola aber bei 1000 Typeeinträgen auch wirklich 1000 genommen und nicht 999999(also ebenfalls Volllast) dann sähe das Ergebnis so aus(also 1000 Spielobjekte vorhanden, 999999 möglich):

5
0 bis 1
41

Nur damit Hubsi die Welt wieder versteht Smile

Generell empfiehlt es sich für Objekte(Spielobjekte, Partikel, etc) Types zu nehmen und für Mapdaten oder Lookup-Tabellen, wo ein Indexzugriff benötigt wird, DIM...

Die Schüsse lassen sich einfacher per Type realisieren(siehe Travis).
B3D-Exporter für Cinema4D!(V1.4)
MD2-Exporter für Cinema4D!(final)

Ebola33

BeitragMi, Jan 12, 2005 1:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich sag' ja, ist wohl auch Geschmacksache. Möglich ist mit beiden Varianten Alles. Wobei es vor und Nachteile gibt. Ich habe mit normalen arrays programmieren gelernt, so benutze ich sie auch heute noch. Nur die Syntax hat sich ein wenig geändert.
Vielleicht war ich nicht besonders objektiv als ich dazu geraten habe Wink
Denn für die paar Schüsse lohnt sich der Aufwand nicht(wie Travis schon sagt)

Aber es ging ja auch um die Geschwindigkeit Wink
ansteckend... Wink
verstaubtes Projekt : http://www.mitglied.lycos.de/ebola33/

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group