Dim-Felder statt Types (Diskussion)
Übersicht

Gehe zu Seite Zurück 1, 2, 3 Weiter
getlose |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@hubsi, damit könntest du recht haben, ich hab das auch
mal irgendwo gelesen...nur wo... ![]() |
||
![]() |
Jolinah |
![]() Antworten mit Zitat ![]() |
---|---|---|
Kann schon sein, ich weiss nicht wie es bei BB genau geregelt wird, jedenfalls ist es bei richtiger oop so und deswegen hab ich angenommen das es bei bb auch so ist.
Irgend in nem anderen Post hab ich das auch schon geschrieben: BB ist mir persönlich eh noch zu wenig OOP. Viele Projekte hab ich schon liegen lassen nur weil es mich angekackt hat irgend eine umständliche andere Lösung zu benutzen, wo man mit OOP ganz leicht hätte lösen können. Deshalb freu ich mich schonmal auf BlitzMax ![]() |
||
![]() |
KabelbinderSieger des WM-Contest 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nagut:
Erstmal danke für das Lob, Holzchopf. Aber das mit der Tabelle ist finde ich nicht so gravierend, schließlich muss man das Dim-Feld ja nicht bei 0 beginnen. Ich habe es in diesem Fall so dargestellt, dass es halt bei eins anfängt. Außerdem: manche Sachen, die hier niedergeschrieben wurden kann man einfach nicht stehenlassen: z.B. Zitat: müssen bei DIM alle möglichen Gegner(egal ob lebend, abgenibbelt oder noch gar nicht erstellt) geprüft werden
Wieder so einer, der das Tutorial offensichtlich nicht gelesen hat: Ich habe mehrmals auf den Eintrag "leben" hingewiesen es ist bei dims zwar der Fall, dass jeder eintrag "leben" erstmal gecheckt werden muss, aber man macht für den gegner keine Bewegungsberechnung oder Kollisionsabfrage, wenn er nicht lebt. Die macht man nur dan, wenn der eintrag leben = 1 ist. Und bei der Zeit, die bei der Lebensabfrage draufgeht, handelt es sich echt um Peanuts. Hab mal ein kleines Testprogramm geschrieben: Code: [AUSKLAPPEN] Graphics 640,480,16,2
SeedRnd MilliSecs() Dim array(100000) punkt = MilliSecs() For i = 0 To 100000 If array(i)=3 Then a = 0 Next zeit = MilliSecs()-punkt Write "hat " +Str$(zeit)+ " Millisekunden gedauert" WaitKey End Bei mir 16 Millisekunden für 100000 Gegner. Also ist die Frage, was schneller ist gar nicht so leicht zubeantworten. |
||
<Wing Avenger Download> ◊◊◊ <Macrophage Download> |
- Zuletzt bearbeitet von Kabelbinder am Mi, Sep 29, 2004 17:58, insgesamt einmal bearbeitet
![]() |
Gina |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo,
ich finde auch, dass man nicht pauschal sagen kann, ob nun Dim-Felder oder Type-Felder besser sind. Es kommt eben immer auf die Situation bzw. auf den konzipierten Spielablauf an. Bei Bubbles habe ich es z.B. so gemacht: Ich habe ein Dim-Feld für meine 300 Kugeln, in denen ich die x- und y-Koordinaten speicher und die Farbe. Wobei Farbe = 0 bedeutet, dass die Kugel schon weg ist. Dazu habe ich ein Type-Feld, wo ich die Anzahl der verbleibenden Möglichkeiten speicher. Jede Möglichkeit hat eine Nummer und zu jeder Möglichkeit werden die betreffenden Kugeln in der Type-Tabelle aufgenommen. Wenn nun eine Kugel angeklickt wurde, ratter ich durch das Type-Feld, suche die Nummer raus und setze bei allen Kugeln, die diese Nummer haben, im Dim-Feld die Farbe auf 0. Ich spreche also die Dim-Felder gezielt an und muss nicht alle 300 Kugeln durchprüfen. Die Type-Tabelle wird dann gelöscht und beim nächsten Durchlauf neu aufgebaut. Man sieht auch deutlich, dass die Frames steigen, je weniger Kugeln auf dem Bildschirm sind. Die Kombination von Dim- und Type-Feld, war für meinen Zweck die schnellste Methode. Jeder sollte einfach beide Arten lernen und verstehen und damit experimentieren, um die beste für sich rauszufinden. Und wie gesagt, je nach Situation kann mal dieses und mal jenes Ergebnis bei rauskommen... Gina. |
||
www.jk-spiele.de |
![]() |
Suco-XBetreff: ...... |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du hast ihn falsch verstanden.
Du musst doch jedesmal deine 100000 Gegner durchgehen und fragen ob sie leben oder nicht. Das meint er damit. Bei Types hat man so viele Gegner wie gebraucht werden und muss nicht mit einem Maximalen Wert arbeiten. Du gehst also mit jeder Schleife 100000 Einträge durch mit der Dim Version, egal ob nur 10 oder 100 Gegner überhaupt leben. Und mit Types müsstet du halt nur die 10 oder 100 Einträge durchgehen und kannst dir desweiteren die Leben Abfrage auch sparen. Also ist die Frage ob die 100000 Abfragen schneller sind als die 20 Abfragen bei der Type Version. |
||
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB |
![]() |
Gina |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nein, ich habe ihn schon richtig verstanden, keine Sorge... ![]() Trotzdem gibt es auch bei Monstern Situationen, wo ich auch Dim-Felder nehmen würde: Nehmen wir mal an, ich habe einen bestimmten Spot, wo ständig 25 Monster rumhängen. Die werden gekillt und spawnen nach einer gewissen Zeit wieder. Warum sollte ich in diesem Fall ständig Type-Felder anlegen und löschen...? Wie gesagt, es gibt für jede Situation einen passenden Feld-Typ und jeder sollte es im Zweifelsfall einfach probieren, welcher dann am geeignetsten ist. Gina. Edit. Selbst bei 300 schon, war das Dim-Feld bedeutend schneller, als ein Type-Feld... |
||
www.jk-spiele.de |
![]() |
Jolinah |
![]() Antworten mit Zitat ![]() |
---|---|---|
Gina, Suco hat wahrscheinlich auch nicht dich gemeint sondern Kabelbinder ![]() Und mit deiner Aussage triffst du voll ins Schwarze. Es gibt Situationen wo Arrays eindeutig bevorzugt werden können. Ich habe nichts gegen Arrays, man sollte beide gemischt gebrauchen, aber immer klug verwenden. Es ging mir auch hauptsächlich drum die Sache mit dem Speicher zu erklären. Und wie gesagt bieten andere Sprachen noch viel mehr so Elemente wie Types. Types sind von daher sogar schon etwas primitiv. In diesen Sprachen sieht man es eigentlich nie das ein Array für sowas missbraucht wird. Aber spielt ja jetzt keine Rolle, wir sind hier bei BB ![]() |
||
![]() |
sbrog |
![]() Antworten mit Zitat ![]() |
---|---|---|
man könnte doch das ganze so verwalten ,dass alle lebdigen Gegner im vorderen Teil des Dimfelds gespeichert werden und alle toten im hinteren. Wäre mittels sortierverfahren ganz einfach.
Dann könnte man sich eine Funktion Create(parameter) schreiben, die jedesmal die anzahl um 1 erhöht, wenn ein gegner erstellt wird. Wenn man die Anzahl der lebenden Gegner weiß, kann man genau soviele durchgehen. Da alle lebenden im vorderen bereich des felds gespeichert sind, werden nur die lebenden durchgegangen. |
||
![]() |
Gina |
![]() Antworten mit Zitat ![]() |
---|---|---|
Aso... *oops* ![]() @ sbrog Das ist natürlich auch keine schlechte Idee und bestimmt in manchen Situationen ideal... Gina. |
||
www.jk-spiele.de |
hot-bitGast |
![]() Antworten mit Zitat |
|
---|---|---|
Hoi,
es geht hier eigentlich nicht darum, was schneller oder langsamer ist. Denn bei der Geschwindigkeit unserer heutigen Prozessoren, macht das ja einen Klacks aus. Ich bin mit DIM's aufgewachsen, und habe die über 20 Jahre verwendet. Also habe da einige Erfahrung damit. Das könnt ihr mir glauben. Als ich aber hier bei BB die Type's entdeckte, war ich froh, daß ich etliche Sachen nun viel einfacher lösen konnte. Ich möchte Types einfach nicht mehr missen ... Es hat DIM seine Berechtugung und Types auch. DIM verwende ich, wenn ich 1 oder 2 feldrige Arrays benutze, ansonsten nur mehr Types. Und falls wer bei DIM stehenbleibt, der kapiert die TYPE's einfach nicht. Das ist aber dann sein Problem ! Und der soll dann auch keinen Schwachsinn über Types schreiben. Pasta. Toni |
||
![]() |
D2006Administrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
hier meine two cents:
Ich benutz lieber DIMs. Mir ist egal was andere benutzen. Ich finde die Diskussion zeitverschwendung. In der Zeit, wo hier ohne Ergebnis gepostet wird, kann man schöne DIM oder TYPE routinen für Spiele coden. Macht das! Ist produktiver. MfG |
||
BIG BUG |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@Kabelbinder: OK, das mit dem "schneller" sind wirklich Peanuts(hätte gedacht das dauert länger), aber DIMs sind eben nicht generell schneller.
@sbrog: Ist umständlich zu verwalten und kostet auch seine Rechenzeit. |
||
B3D-Exporter für Cinema4D!(V1.4)
MD2-Exporter für Cinema4D!(final) |
![]() |
KabelbinderSieger des WM-Contest 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
@ Suco
Wer nimmt denn auch 100000 als Maximalwert? Ich nehme eher so 200, oder so. Ich habe hier nur 100000 im Beispiel genommen, damit die benötigte Zeit überhaupt lang genug ist, um sie messen zu können. Bei 200 würde der ja weniger als 1 Millisekunde brauchen, sodass du die Zeit noch nicht mal messen kannst. Außderdem kann man den MaximalWert ja so anlegen, dass er in normalen Maßen liegt. für Pacman z.b würde ich noch nicht mal 200 als Maximalwert nehmen, vielleicht so 15 oder 20. Es ist wohl wahr, das überflüssigerweise ein paar leere Einträge mitgeprüft werden, aber die dafür benötigte Zeit ist verdammt wenig. Und es ist nunmal so, dass Types einfach langsamer sind, als Dim-Felder, und ich behaupte einfach mal, der gebrauch von Types wiegt die Zeit, die gebraucht wird um die leeren Einträge des Dim-Felds zu prüfen, auf. |
||
<Wing Avenger Download> ◊◊◊ <Macrophage Download> |
hot-bitGast |
![]() Antworten mit Zitat |
|
---|---|---|
Hm...
wenn du schon was behauptest, dann beweise es ! Also, setz dich hin, und gib mir ein Beispiel, daß Types soo viel langsamer sind. Dann können wir weiter diskutieren ! Types sind eine Spur langsamer als Arrays. Aber ob sich das bei 200 Aufrufen oder so, zu Buche schlägt, sei dahin gestellt. Ansonsten: nicht aufgeschnapptes nachplappern, sondern testen ! Bin gespannt auf deinen Bericht ! Toni |
||
![]() |
KabelbinderSieger des WM-Contest 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Man, wie konnte ich mich nur dazu breitschlagen lassen, echt ein Testprogramm zu schrieben. Verdammt, so ne Zeitverschwendung, sich über sowas den Kopf zu zerbrechen, ich könnte mich echt aufregen. Wenn jemand ankommt und irgendwas militant anzweifelt, soll erst gefälligst selbst beweisen.
Hot-Bit, wenn dich das so interessiert, was schneller ist, kannst du das dann nicht auch selber rausfinden, oder muss Kabelbinder die ganze Drecksarbeit erledigen? Übrigens, das mit dem schneller hab ich aus Rene's Buch. Und dann kann ich's doch auch glauben, oder? So, hier die Test Programme. Beide erstellen 20000 objekte mit x,y,xricht,yricht,red,green und blue, einer mit Type, einer mit dim. bei mir bei Type 83 im Durchschnitt, bei Dim 81 im durchschnitt. dim: Code: [AUSKLAPPEN] Graphics 640,480,16,1
SetBuffer BackBuffer() SeedRnd MilliSecs() Dim gegner(20000,8) For i = 0 To 20000 gegner(i,1)=Rand(100,540) gegner(i,2)=Rand(100,380) gegner(i,3)=1 gegner(i,4)=Rand(-2,2) If gegner(i,4)=0 Then gegner(i,4)=1 gegner(i,5)=Rand(-2,2) If gegner(i,5)=0 Then gegner(i,5)=1 gegner(i,6)=Rand(0,255) gegner(i,7)=Rand(0,255) gegner(i,8)=Rand(0,255) Next Repeat punkt = MilliSecs() For i = 0 To 20000 If gegner(i,3)=1 Then Color gegner(i,6),gegner(i,7),gegner(i,8) gegner(i,1) = gegner(i,1) + gegner(i,4) gegner(i,2) = gegner(i,2) + gegner(i,5) If gegner(i,1)>640 Then gegner(i,1)=0 If gegner(i,1)<0 Then gegner(i,1)=640 If gegner(i,2)>480 Then gegner(i,2)=0 If gegner(i,2)<0 Then gegner(i,2)=480 Rect gegner(i,1),gegner(i,2),5,5 EndIf Next zeit = MilliSecs()-punkt punkt = MilliSecs() c = c + 1 viel = viel + zeit Color 0,0,0 Rect 0,0,100,20 Color 255,255,255 Text 0,0,zeit,0,0 Flip 0 Cls Until KeyHit(1) FlushKeys() Cls Text 320,240,Str$(viel/c) + " im Durchschnitt.",1,1 Flip WaitKey End type Code: [AUSKLAPPEN] Graphics 640,480,16,1
SetBuffer BackBuffer() SeedRnd MilliSecs() Type gegner Field x,y,xricht,yricht,red,green,blue End Type For i = 0 To 20000 quat.gegner = New gegner quat\x = Rand(100,540) quat\y = Rand(100,380) quat\xricht = Rand(-2,2) If quat\xricht = 0 Then quat\xricht = 1 quat\yricht = Rand(-2,2) If quat\yricht = 0 Then quat\yricht = 1 quat\red = Rand(0,255) quat\green = Rand(0,255) quat\blue = Rand(0,255) Next Repeat punkt = MilliSecs() For quat.gegner = Each gegner Color quat\red,quat\green,quat\blue quat\x = quat\x + quat\xricht quat\y = quat\y + quat\yricht If quat\x>640 Then quat\x=0 If quat\x<0 Then quat\x=640 If quat\y>480 Then quat\y=0 If quat\y<0 Then quat\y=480 Rect quat\x,quat\y,5,5 Next zeit = MilliSecs()-punkt punkt = MilliSecs() c = c + 1 viel = viel + zeit Color 0,0,0 Rect 0,0,100,20 Color 255,255,255 Text 0,0,zeit,0,0 Flip 0 Cls Until KeyHit(1) FlushKeys() Cls Text 320,240,Str$(viel/c) + " im Durchschnitt.",1,1 Flip WaitKey End und D2006, ich muss mich dir echt anschließen! |
||
<Wing Avenger Download> ◊◊◊ <Macrophage Download> |
hot-bitGast |
![]() Antworten mit Zitat |
|
---|---|---|
Hi,
bißchen wirr im Kopf ? Hatte ich nicht geschrieben, daß Types eine Spur langsamer sind ? Ich wußte es ja. Wollte nur dich überzeugen, daß der Zeit-unterschied nicht so gravierend ist, wie Rene das immer behauptet ! Und deswegen sagte ich, zeig mir eine Demo. Types sind viel leichter zu handhaben ! Oder was ist da leichter zu verstehen : wert(1,1)=20 wert(1,2)=30 wert(1,3)=4 wert(1,4)=-2 wert(1,5)=1 wert(1,6)=6 ..... oder: wert\x=20 wert\y=30 wert\x_vel=4 wert\y_vel=-2 wert\richtung=1 wert\status=6 ..... Also für mich sind Types viieelll einfacher. Denn bei den Arrays müßte ich immer wieder nachgucken, was was für was ist ! Toni |
||
junky |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
sagt mal ... Types ( Structures ) ansich haben doch erstmal garnix mit Arrays zu tun !?
ich kann Types genauso mit Arrays verbinden, wie mit LinkedLists ( was hier wohl viele als schlicht weg die einzige Art mit Types zu arbeiten ansehen ) ich persönlich arbeite z.B. sehr gerne mit der Type/Array-Kombi, da ich hierbei einfach den Überblick und die Möglichkeiten der Types habe (z.B. nochma en BlitzArray einfügen, ohne in ne 2. oder 3. ArrayDimension zu müssen ) und gleichzeitig ne Grundstruktur der Arrays, in denen ich auch mal direkt auf ein Element zugreifen kann ohne mich erst wie ein "Affe" entlang hangeln zu müssen... ( blöde Eigenschaft der Types in BB... ) |
||
gestern stand ich noch vorm Abgrund
heute bin ich einen Schritt weiter... |
![]() |
Firstdeathmaker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich habe am Anfang bei meinem ersten Spiel auch nur DIM´s benutzt. Bei den Gegnern klappt das auch ganz gut (Spaceshooter), man kann ja pro level sagen wieviele Gegner auftauchen sollen und danach halt das Feld dimensionieren. Die Schüssen hatte ich ebenso gemacht, allerdings habe ich das nachher in müheseeliger Handarbeit wieder geändert, weil es mit Types einfach flexibler war. Heute schaue ich einfach was gerade besser passt (Für eine Map ist doch ein DIM Feld geradezu geschaffen, oder?).
@ Alle die Types noch nicht so richtig verstanden haben und lieber DIM´s benutzen: Ich empfehle euch das nochmal zu versuchen, es ist wirklich besser wenn man flexibel in solchen Sachen ist, als sich stur und starr nur an das zu klammern was man besser kann. |
||
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon Gewinner des BCC #57 User posted image |
Timo |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Es gibt viele Sachen, die mit Dims leichter zu lösen sind, es gibt aber auch genauso viele Sachen, die mit Types zu lösen sind. Darum könnte ich nicht sagen ich mag Dims oder Types lieber. Vielmehr finde ich es gut, das man die Auswahl hat!! Ohne Types zu programmieren fänd ich genauso blöd wie ohne Dims ![]() |
||
![]() |
TheShadowModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: Du gehst also mit jeder Schleife 100000 Einträge durch mit der Dim Version, egal ob nur 10 oder 100 Gegner überhaupt leben. Und mit Types müsstet du halt nur die 10 oder 100 Einträge durchgehen
wenn du 100 DIM-einträge hast und du willst, Nr. 70 löschen - dann entsteht eine Lücke. Um diese zu schliessen, kann man entw alle 71-100 elemente nach vorne rücken (langsam) oder man verschiebt #100 nach #70 und setzt max-variable auf 99 (die man sowieso haben sollte) Hat den Nachteil, dass die Einträge ständig umsortiert werden... |
||
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2 |
Gehe zu Seite Zurück 1, 2, 3 Weiter
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group