Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
*Andy*
Anmeldungsdatum: 15.12.2007 Beiträge: 9
|
Verfasst am: 02.09.2008, 10:31 Titel: Sub in Udt einbinden |
|
|
Hallo,
Weiß einer ob das funktioniert in eine Udt eine beliebige Sub einzubinden,
hab folgendes schon versucht bekomme aber nur Fehlermeldungen.
Code: |
Screen 1
Type _Spieler
Schild As Sub
Waffe As Sub
End Type
Declare Sub Schild1 ()
Declare Sub Schild2 ()
Declare Sub Waffe1 ()
Declare Sub Waffe2 ()
Dim Spieler As _Spieler
'--- Funktioniert nicht --->
Spieler.Schild = Sub Schild1 () 'Sub's zuweisen
Spieler.Waffe = Sub Waffe2 ()
Spieler.Schild 'Sub's aufrufen
Spieler.Waffe
'--------------------------<
Sleep
Sub Schild1 ()
Print "Schild1"
End Sub
Sub Schild2 ()
Print "Schild2"
End Sub
Sub Waffe1 ()
Print "Waffe1"
End Sub
Sub Waffe2 ()
Print "Waffe2"
End Sub
|
Vieleicht weis von euch einer ob/wie das geht.
Bisher hab ichs so gemacht,
Code: |
Screen 1
Type _Spieler
Schild As byte
Waffe As byte
End Type
Declare Sub Schild1 ()
Declare Sub Schild2 ()
Declare Sub Waffe1 ()
Declare Sub Waffe2 ()
Dim Spieler As _Spieler
Spieler.Schild = 1
Spieler.Waffe = 2
select Case Spieler.Schild
Case 1
Schild1
Case 2
Schild2
End Select
select Case Spieler.Waffe
Case 1
Waffe1
Case 2
Waffe2
End Select
Sleep
Sub Schild1 ()
Print "Schild1"
End Sub
Sub Schild2 ()
Print "Schild2"
End Sub
Sub Waffe1 ()
Print "Waffe1"
End Sub
Sub Waffe2 ()
Print "Waffe2"
End Sub
|
ist mir aber zu unflexiebel. |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 02.09.2008, 13:09 Titel: |
|
|
Du könntest höchstens die Pointer auf die SUBs zuweisen.
Warum aber nicht so?
Code: | SUB schild(Spieler AS _Spieler)
SELECT CASE Spieler.Schild
CASE 1
' tue, was Schild1 tun soll
CASE 2
' tue, was Schild2 tun soll
END SELECT
END SUB
DIM AS _Spieler SpielerNeu
SpielerNeu.Schild = 1
schild(SpielerNeu) |
Es gibt auch noch PROPERTY, was ich aber noch nicht ausprobiert habe und was auf mich eher den Eindruck einer FUNCTION macht als einer SUB. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
Stormy

Anmeldungsdatum: 10.09.2004 Beiträge: 567 Wohnort: Sachsen - wo die schönen Frauen wachsen ;)
|
Verfasst am: 02.09.2008, 13:49 Titel: |
|
|
Hallo,
wie nemored richtig gesagt hat, musst du auf die Pointer der Subs zugreifen:
Code: | TYPE _Spieler
Schild AS SUB()
Waffe AS SUB()
END TYPE
DECLARE SUB Schild1 ()
DECLARE SUB Schild2 ()
DECLARE SUB Waffe1 ()
DECLARE SUB Waffe2 ()
DIM Spieler AS _Spieler
'--- Funktioniert jetzt ;) --->
Spieler.Schild = @Schild1
Spieler.Waffe = @Waffe2
Spieler.Schild() 'SUB's aufrufen
Spieler.Waffe() |
_________________ +++ QB-City +++ Die virtuelle Stadt für jeden Freelancer - Join the community!
Projekte: QB-City,MysticWorld (RPG), 2D-OpenGL-Tutorial |
|
Nach oben |
|
 |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 02.09.2008, 13:52 Titel: |
|
|
Du hast es fast richtig gemacht!
Leider ist der Weg einem Sub-pointer die adresse zuzuweisen und dann aufzurufen etwas "anders":
Code: |
Screen 1
Type _Spieler
Schild As Sub
Waffe As Sub
End Type
Declare Sub Schild1 ()
Declare Sub Schild2 ()
Declare Sub Waffe1 ()
Declare Sub Waffe2 ()
Dim Spieler As _Spieler
'--- Funktioniert nicht --->
Spieler.Schild = @Schild1 'Sub's zuweisen
Spieler.Waffe = @Waffe2
Spieler.Schild() 'Sub's aufrufen
Spieler.Waffe()
'--------------------------<
Sleep
Sub Schild1 ()
Print "Schild1"
End Sub
Sub Schild2 ()
Print "Schild2"
End Sub
Sub Waffe1 ()
Print "Waffe1"
End Sub
Sub Waffe2 ()
Print "Waffe2"
End Sub
|
Wenn ich etwas weiterinterpretieren darf:
Du möchtest verschiedene Spieler als Objekte darstellen. Das hat durchaus seine legitimation und macht einiges einfacher.
Dennoch ist es ein großer Nachteil das du innerhalb dieser Subs nicht auf die Elemente der type zugreifen kannst.
Das kann man umgehen indem man einen Pointer auf das type der sub mitübergibt, oder die Subs direkt in die type implementiert! |
|
Nach oben |
|
 |
*Andy*
Anmeldungsdatum: 15.12.2007 Beiträge: 9
|
Verfasst am: 02.09.2008, 19:40 Titel: |
|
|
Danke für die schnellen antworten.
Jetzt kanns weitergehen. |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 02.09.2008, 22:01 Titel: |
|
|
ich finde den zeitabstand zwischen den beiden antworten kurios...  _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 03.09.2008, 12:51 Titel: |
|
|
Ja da hat sich beim tippen was überschnitten ... ca 3 minuten hab ich glaub ich auch ungefähr gebraucht... |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 03.09.2008, 15:17 Titel: |
|
|
damit warst nicht du gemeint... ich meinte nur, dass *Andy* zwei mal das gleiche gepostet hat, aber mit 1 stunde pause zwischendrin  _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
|
Nach oben |
|
 |
Dusky_Joe

Anmeldungsdatum: 07.01.2005 Beiträge: 1007 Wohnort: Regensburg/Oberpfalz
|
Verfasst am: 24.09.2008, 16:23 Titel: |
|
|
Deklariere die SUB direkt im Type:
Code: | Type foo
bar As Integer
Declare Sub foobar ()
End Type
Dim x As foo
x.bar = 7
x.foobar
Sub foo.foobar ()
Print This.bar
End Sub |
Siehe auch CONSTRUCTOR und DESTRUCTOR in der FB-Referenz.
Have a nice day
Ciao
Dusky_Joe _________________ fully biological degradable
Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet. |
|
Nach oben |
|
 |
|