Vererbung von Types?

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

M0rgenstern

Betreff: Vererbung von Types?

BeitragDi, Dez 01, 2009 13:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Leute.
Wollte mal nachfragen, ob man Types vererben kann.
Ich möchte nämlich gerne Gegner programmieren, die nicht sterben, sondern sich aufteilen.
Diese sollen dann in etwa die Werte des "alten" gegners übernehmen etc.

Ist Vererbung in BlitzBasic (Blitz3D) möglich?
Ich möchte nämlich nicht die GegnerErstellen() Funktion umändern. Mit Vererbung wäre das einfacher.

Hoffe mir kann jemand helfen.

Lg, M0rgenstern

D2006

Administrator

BeitragDi, Dez 01, 2009 13:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Kurz und knapp: Nein.
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard
Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium
Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2

M0rgenstern

BeitragDi, Dez 01, 2009 13:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Also muss ich das doch als neue Funktion machen.
Schade.

Okay, danke.

Lg, M0rgenstern
 

Meik

BeitragDi, Dez 01, 2009 14:05
Antworten mit Zitat
Benutzer-Profile anzeigen
hmm mach doch sowas wie:

Code: [AUSKLAPPEN]

Gengertyp.type
...
function Kopie.type( Quelle.type )
    Kopie.type = new Type
    Kopie\leben = Quelle\leben
    Kopie\PosX = Quelle\PosX
    ...
    return Kopie
end function


Ist zwar keine Vererbung aber so ersparst du dir ( denk ich mal ) das umbaun deiner Funktion und du hast nur eine Funktion mehr im Quelltext.

MFG

M0rgenstern

BeitragDi, Dez 01, 2009 16:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, das hab ich mir gedacht, dass sowas besser ist.

Werd ich dann tun, ist ja im Grunde sowas wie Vererbung in dem Moment.
Geht halt nur um die Werte etc.

Dankeschön.

Lg, M0rgenstern

Silver_Knee

BeitragDi, Dez 01, 2009 17:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Vererben was du meinst ist auch ein anderes als das Allgemeine Vererben, dass man so aus der Programmiersprache kennt.

Du musst dem PC schon so sagenw as du vorhast besonders deshalb weil du sicher nicht alle werte einfach kopierst sondern verschiedene anpasst wie zB das Leben oder ähnliches
 

Fredko

BeitragDi, Dez 01, 2009 18:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn du bloß die Werte übergeben willst, gehe doch folgend vor:
Wenn der Gegner kein Leben mehr hat, also Sterben müsste,
"speicherst" du alle Werte, die übergeben werden sollen, in einzelne
Variablen und erstellst so oft die neuen Gegner wie nötig mit den
Variablen die du "gespeichert" hast. Diese sind dann einfache lokale
Variablen, die z.B. die Namen der Typefelder haben, am besten mit einem
Präfix zur Unterscheidung. Wichtig ist, dass die Variablen während des
Aufrufes des zu klonenden Gegners speicherst, denn du wirst die garantiert
nicht vom Type abrufen können, wenn du schon ein neues initialisiert hast.
Als Beispiel:
BlitzBasic: [AUSKLAPPEN]

Type gegner
Field leben
Field x,y,kraft ;Schauvariablen
End Type

Global g.gegner

...

;Wenn denn nun das leben=<0...

l_leben=g\leben ;"Speichern" der Werte vom Type (natürlich sollte dies in der For-Each Schleife o.ä. genutzt werden!)
l_x=g\x
l_y=g\y
l\kraft=g\kraft

...

g=New gegner
g\leben=l_leben ;Und hier nun die Anwendung der Variablen
...

!

M0rgenstern

BeitragDi, Dez 01, 2009 22:59
Antworten mit Zitat
Benutzer-Profile anzeigen
@ Fredko, ja so kann ichs machen.

Aber ich hab neulich im Forum sowas gesehen wie das:

Code: [AUSKLAPPEN]
Type TTier
field XPos, YPos
Field Verschiedene Eigenschaften...
end type

Type TKatze
field Tier.TTier
field verschiedene Eigenschaften
end type

type THund
field Tier.TTier
field verschiedene Eigenschaften
End type
. . .


So kann man das doch auch halten, oder?
Das würde doch im prinzip auch unter Vererbung laufen, oder?

Lg, M0rgenstern

Silver_Knee

BeitragDi, Dez 01, 2009 23:12
Antworten mit Zitat
Benutzer-Profile anzeigen
kann man so machen.

Evtl musste die Handle des Kindobjekts als int noch bei deinem ElternObjekt mitgeben, wenn die sucherei zu viel ist.

M0rgenstern

BeitragMi, Dez 02, 2009 16:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Ah okay.
Das hatte ich nämlich im Hinterkopf, war mir aber nicht mehr sicher.

Vielen Dank...
Darauf zugegriffen wird ja so:

Code: [AUSKLAPPEN]
New Tier.TTier
Zuweisungen...

New Katze.TKatze
Zuweisungen..
Katze\Tier.TTier = (Tiertyp der dazugehört)

;Und dann:
for Katze.TKatze = each TKatze
Katze\Tier.TTier\PosX


Oder ist das falsch?

Lg, M0rgenstern

FireballFlame

BeitragMi, Dez 02, 2009 21:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Nicht ganz.

So:
Code: [AUSKLAPPEN]
Local Tier.TTier=New TTier
Zuweisungen...

Local Katze.TKatze=New TKatze
Zuweisungen..
Katze\Tier = (Tierobjekt das dazugehört)

;Und dann:
For Katze = Each TKatze
Katze\Tier\PosX
...

Bei New gibt man nur den Typenamen an, z.B. "TTier". Das ".TTier" braucht man nur, wenn man eine neue Variable deklariert, genau wie "#" oder "$".
Die "Local"s sind nicht unbedingt nötig, erleichtern aber die Fehlersuche, wenn man eine gute IDE wie IDEal benutzt.
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group