Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Sub in Udt einbinden

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
*Andy*



Anmeldungsdatum: 15.12.2007
Beiträge: 9

BeitragVerfasst am: 02.09.2008, 10:31    Titel: Sub in Udt einbinden Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 02.09.2008, 13:09    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Stormy



Anmeldungsdatum: 10.09.2004
Beiträge: 567
Wohnort: Sachsen - wo die schönen Frauen wachsen ;)

BeitragVerfasst am: 02.09.2008, 13:49    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 02.09.2008, 13:52    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
*Andy*



Anmeldungsdatum: 15.12.2007
Beiträge: 9

BeitragVerfasst am: 02.09.2008, 19:40    Titel: Antworten mit Zitat

Danke für die schnellen antworten.

Jetzt kanns weitergehen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 02.09.2008, 22:01    Titel: Antworten mit Zitat

ich finde den zeitabstand zwischen den beiden antworten kurios... lächeln
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
OneCypher



Anmeldungsdatum: 23.09.2007
Beiträge: 802

BeitragVerfasst am: 03.09.2008, 12:51    Titel: Antworten mit Zitat

Ja da hat sich beim tippen was überschnitten happy ... ca 3 minuten hab ich glaub ich auch ungefähr gebraucht...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 03.09.2008, 15:17    Titel: Antworten mit Zitat

damit warst nicht du gemeint... ich meinte nur, dass *Andy* zwei mal das gleiche gepostet hat, aber mit 1 stunde pause zwischendrin durchgeknallt
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 04.09.2008, 18:18    Titel: Antworten mit Zitat

http://www.freebasic-portal.de/index.php?s=tutorials&id=41&seite=1
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Dusky_Joe



Anmeldungsdatum: 07.01.2005
Beiträge: 1007
Wohnort: Regensburg/Oberpfalz

BeitragVerfasst am: 24.09.2008, 16:23    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz