Types

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Stinktier

Betreff: Types

BeitragDo, Sep 02, 2004 15:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn ich jetzt ein Type definiert habe :
Code: [AUSKLAPPEN]

 Type gegner
::
::
 End Type

Muss ich , wenn ich 20 neue Types(gegner) erstellen will,
alle einzeln erstelen?

Denn mit einer Schleife
Code: [AUSKLAPPEN]

For a = 0 To 20
a.gegner = New gegner
Next

funtzt das nit.
Das gleiche Problen, bei Allen Gegner einen Wert zu weisen, alle auf Kollision prüfen und alle auszugeben.

Mir ist grade (jetzt) eingefallen.
Das ich
Code: [AUSKLAPPEN]

a

mal als Code: [AUSKLAPPEN]

Dim a(20)

Aber wie schon gesagt das ist mir jetzt grade eingefallen und ich habs noch nicht getestet^_^
 

Timo

Betreff: Re: Types

BeitragDo, Sep 02, 2004 15:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Stinktier hat Folgendes geschrieben:

Code: [AUSKLAPPEN]

For a = 0 To 20
a.gegner = New gegner
Next



Doch, damit hast du soeben 21 neue gegner erstellt, den letzten eintrag kannst du noch über die Variable a ansprechen!
 

Kaylie

BeitragDo, Sep 02, 2004 15:30
Antworten mit Zitat
Benutzer-Profile anzeigen
So müßte es gegen:

Code: [AUSKLAPPEN]
For a = 0 To 20
g.gegner = New gegner
Next
  • Zuletzt bearbeitet von Kaylie am Do, Sep 02, 2004 15:31, insgesamt einmal bearbeitet
 

Stinktier

BeitragDo, Sep 02, 2004 15:30
Antworten mit Zitat
Benutzer-Profile anzeigen
trotzdem ebi dim feldern wird auch die Null mit gezählt

BladeRunner

Moderator

Betreff: Re: Types

BeitragDo, Sep 02, 2004 15:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Timo hat Folgendes geschrieben:
Stinktier hat Folgendes geschrieben:

Code: [AUSKLAPPEN]

For a = 0 To 20
a.gegner = New gegner
Next



Doch, damit hast du soeben 21 neue gegner erstellt, den letzten eintrag kannst du noch über die Variable a ansprechen!


Das wird nicht funktionieren (wird wohl ein "type mismatch"-error).
Du deklarierst a als normale Integer und versuchst dann a als Index für deinen Type zu nutzen. Damit kommt der Compiler nicht zurecht.
Code: [AUSKLAPPEN]
For a = 0 To 20
g.gegner = New gegner
Next

ist dann die korrekte Version. Wink
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

Stinktier

BeitragDo, Sep 02, 2004 15:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Kaylie hat Folgendes geschrieben:

Code: [AUSKLAPPEN]
For a = 0 To 20
g.gegner = New gegner
Next

Dass würde aber einen Fehler geben da das G nicht erhöht wird.Deshalb
wird in 20 Durschläufen insgesamt ein ganzer gegner erzeugt.
 

hot-bit

Gast

BeitragDo, Sep 02, 2004 15:43
Antworten mit Zitat
Hoi,

bist du dir da sicher ?

Wenn nicht, dann laß in Zukunft diese nichtwissenden Kommentare !

Toni
 

Stinktier

BeitragDo, Sep 02, 2004 15:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja ich bin mir sicher weil ichs grade getestet habe.
Variable must be a Type
Die Variable muss ein Type sein für ganz schlaue^_^
 

Kaylie

BeitragDo, Sep 02, 2004 15:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Stinktier hat Folgendes geschrieben:
Kaylie hat Folgendes geschrieben:

Code: [AUSKLAPPEN]
For a = 0 To 20
g.gegner = New gegner
Next

Dass würde aber einen Fehler geben da das G nicht erhöht wird.Deshalb
wird in 20 Durschläufen insgesamt ein ganzer gegner erzeugt.


Falsch, es werden 21 Gegner erzeugt.
Die kannste dann mit:
Code: [AUSKLAPPEN]
For g.gegner = Each gegner

durchlaufen.

BladeRunner

Moderator

BeitragDo, Sep 02, 2004 17:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Stinktier, ich kann dir nur raten das Thema types nochmal gründlich durchzuarbeiten, denn was du schreibst ist schlicht und ergreifend FALSCH.
wenn du g schon vorher verwandt hast wird die zuweisung ungültig sein, ansonsten funktioniert g.gegner= new gegner einwandfrei.
hast du vielleicht global g im code? dann geht es nicht... Types sind immer global Wink
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

Timo

Betreff: Re: Types

BeitragDo, Sep 02, 2004 18:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Stinktier hat Folgendes geschrieben:
Code: [AUSKLAPPEN]

For a = 0 To 20
a.gegner = New gegner
Next



So, nochmal. Dabei gibt es mit Sicherheit einen Error namens "Variable must be a type" oder so, weil er als erstes die Zeile
Code: [AUSKLAPPEN]
For a = 0 To 20

bearbeitet, und a als Ganszahl deklariert. Aber man sollte auch nie einen Schleifenzähler in der Schleife verändern --> a.gegener = ....... !!! Ganz Böse!! Smile

Besser währe:

Code: [AUSKLAPPEN]

For counter = 0 To 20
a.gegner = New gegner
Next

The Yeti

BeitragFr, Sep 03, 2004 10:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Stell dir das so vor:
Bei
Code: [AUSKLAPPEN]

For a = 0 To 20
g.gegner = New gegner
Next

wird beim ersten Durchlaufen der Schleife ein neues Type erstellt und der Variable g.gegner der Zugriff auf dieses verliehen.
Beim zweiten Mal wird erneut ein neues Type erstellt. Die Variable wird nun mit diesem verknüpft, verliert aber die Verbindung zum ersten Type.
So wiederholt sich das dann, bis du 21 Types und eine Variable hast, mit der du auf Type 21 zugreifen kannst.
Wenn du nun z.B. eine Kollision überprüfen willst, könntest du das so machen:
Code: [AUSKLAPPEN]
For g.gegner = EACH gegner
For h.gegner = EACH gegner
If ImagesCollide(gegnerbild, g\positionX, g\positionY, g\frame, gegnerbild, h\positionX, h\positionY, h\frame)
Delete g.gegner ; Wenn z.B. nach einer Kollision beide Types verschwinden sollen
Delete h.gegner
EndIf
Next
Next
 

Timo

BeitragFr, Sep 03, 2004 11:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie schafft man es eigentlich jeden mit jeden auf Kollision zu überprüfen OHNE das man jeden doppelt prüft?

Denn mal ist ein Type mit g verlinkt, mal mit h bzw umgekehrt mal h und mal g. Das heißt man prüft 2 verschiedene Types 2 mal auf Kollision. Kann man das übergehen?

BladeRunner

Moderator

BeitragFr, Sep 03, 2004 11:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Du kannst einem Field deines Types eine ID-Nummer aufdrücken, bringt jedoch leistungstechnisch quasi nix weil du ja dann auf identische ID prüfen musst.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Markus2

BeitragFr, Sep 03, 2004 12:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Stinktier hat Folgendes geschrieben:
...
Variable must be a Type


BB legt selber Variablen an wenn man sie vergißt zu
declarieren .

Also besser wäre immer

Type GegnerType
End Type

Global XGegner.GegnerType ;<- einmal allgemein
Local GegnerX.GegnerType ;<- oder z.B. in einer Funktion

Die Type Collection ist aber immer Global ,
also wenn du in einer Funktion einen neuen Eintrag machst
mit NEW ist der auch nach dem verlassen noch vorhanden !

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragFr, Sep 03, 2004 12:48
Antworten mit Zitat
Benutzer-Profile anzeigen
@Timo
das war doch letzte Woche erst....
Überflüssige Kollisionsprüfungen bei Types reduzieren Wie?

https://www.blitzforum.de/viewtopic.php?t=5481
[BB2D | BB3D | BB+]
 

Timo

BeitragFr, Sep 03, 2004 13:59
Antworten mit Zitat
Benutzer-Profile anzeigen
@Rallimen: Ich war letzte Woche im Urlaub, bin erst seit Sonntag wieder da, und ich hatte erlich gesagt keine Lust mir alles durchzulesen was ich versäumt hatte, aber danke für den Link Smile
 

mbeuckelmann

BeitragFr, Sep 03, 2004 15:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

Wenn du die die Typen nicht kapierst,
dann würde ich dir vorschlagen die Typen einfach wegzulassen
und Dim_Felder zu benutzen.
Dim-Felder sind glaub ich sowieso schneller!
mfg

mbeuckelmann

BladeRunner

Moderator

BeitragFr, Sep 03, 2004 15:28
Antworten mit Zitat
Benutzer-Profile anzeigen
...dafür sind sie aber auch erheblich unflexibler. Es gibt für beides Pro und Contra, und mit etwas Übung sind auch Types keine Hexerei. Wenn man alles bleiben liesse was man nicht sofort versteht könnte sich kaum einer die Schuhe zubinden...
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Jolinah

BeitragFr, Sep 03, 2004 15:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Es lohnt sich wirklich das Thema Types zu lernen. Ich finde das ist das einfachste was es gibt (jetzt). Vorher hatte ich natürlich auch noch Oft Probleme weil ich diverse Teilbereiche nicht kapiert habe.

Gewisse Dinge kann man ausserdem damit viel einfacher programmieren als mit Arrays. Das heisst nicht das man es mit Array nicht auch programmieren könnte. Aber meist viel umständlicher und es braucht mehr Code. Somit gleicht sich das mit der Geschwindigkeit eh wieder aus.

Andere Dinge hingegen kann man mit Arrays weniger umständlich programmieren und es wäre oft doof dafür nen Type zu verwenden.

Also löst euch von diesem Array vs. Type Krieg und verwendet das was sich am besten eignet, wild durcheinander wie ihr wollt. Um das einschätzen zu können muss man natürlich auch beides komplett verstehen. Deswegen kann ich denen die mit Types noch nicht soviel oder keine Erfahrung haben nur empfehlen das Thema anzuschauen weil sich oft damit Probleme einfacher lösen lassen als wenn man andere Varianten verwendet.

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group