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:

Constructor Bug?

 
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
isiprimax



Anmeldungsdatum: 02.01.2009
Beiträge: 77

BeitragVerfasst am: 05.06.2011, 02:44    Titel: Constructor Bug? Antworten mit Zitat

Hi, ich programmiere zurzeit an einem kleinem Projekt. Ich benutze die MiniB3D Lib. Nun 2 Beispiele.

1. Beispiel das Funktioniert! Ich sehe den Bildschirm mit der Spielfläche und Texturen usw...
Code:

Type spielfeld
   o_camera As Any Ptr
   o_licht As Any Ptr
   o_spielbrett As Any Ptr
   t_spielbrett As Any Ptr
   o_wuerfel_1 As Any Ptr
   o_wuerfel_2 As Any Ptr
   t_wuerfel As Any Ptr
   Declare Sub init()
End Type

Sub spielfeld.init()
   o_camera = CreateCamera()
   o_licht = createlight()
   o_spielbrett = CreateCube()   
   t_spielbrett = LoadTexture("spielbrett.jpg")
   o_wuerfel_1 = LoadMesh("wuerfel.3ds")
   o_wuerfel_2 = LoadMesh("wuerfel.3ds")
   t_wuerfel = LoadTexture("wuerfel.png")
End Sub

Dim Shared scene As spielfeld
scene.init()


2. Das Funktioniert nicht! Ich sehe weisse Objekte und der Bildausschnitt ist auch falsch. Getestet mit Compiler 0.20 - 0.22
Code:

Type spielfeld
   o_camera As Any Ptr
   o_licht As Any Ptr
   o_spielbrett As Any Ptr
   t_spielbrett As Any Ptr
   o_wuerfel_1 As Any Ptr
   o_wuerfel_2 As Any Ptr
   t_wuerfel As Any Ptr
   Declare Constructor ()
End Type

Constructor spielfeld()
   o_camera = CreateCamera()
   o_licht = createlight()
   o_spielbrett = CreateCube()   
   t_spielbrett = LoadTexture("spielbrett.jpg")
   o_wuerfel_1 = LoadMesh("wuerfel.3ds")
   o_wuerfel_2 = LoadMesh("wuerfel.3ds")
   t_wuerfel = LoadTexture("wuerfel.png")
End Constructor

Dim Shared scene As spielfeld


Weiss jemand einen Rat?

mfg Andreas


Zuletzt bearbeitet von isiprimax am 05.06.2011, 16:45, insgesamt 2-mal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Muttonhead



Anmeldungsdatum: 26.08.2008
Beiträge: 565
Wohnort: Jüterbog

BeitragVerfasst am: 05.06.2011, 13:43    Titel: Antworten mit Zitat

Ich bin mir nicht sicher, aber muß der Constructor nicht auch deklariert werden?
Code:
declare constructor

im ersten Beispiel machst du das jedenfalls mit der init

Mutton
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
isiprimax



Anmeldungsdatum: 02.01.2009
Beiträge: 77

BeitragVerfasst am: 05.06.2011, 15:16    Titel: Antworten mit Zitat

Sorry war schon Spät, war ein Verschreiber meinerseits. Das Declare ist im Programm vorhanden, funktioniert trotzdem nicht.

Edit.1:
Wenn ich das Shared beim Constructor Beispiel weglasse gehts.... komisch.
Bei scene.init() gehts auch mit Dim Shared.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
XOR



Anmeldungsdatum: 23.07.2010
Beiträge: 161

BeitragVerfasst am: 05.06.2011, 18:53    Titel: Antworten mit Zitat

Zitat:
Wenn ich das Shared beim Constructor Beispiel weglasse gehts.... komisch.
Bei scene.init() gehts auch mit Dim Shared.

Shared variablen werden ganz am anfang erzeugt, als schon wenn du kein fenster und minib3d noch nicht geinitet ist.
probier mal das:
Code:
Type bt
   Vari As Integer
   Declare Constructor ()
End Type

Constructor bt()
   Print "Constructor bt"
   Vari = 0
End Constructor

'screen 18
Print "Erster befehl nach screen open"
Print "dim wwi as bt start"
Dim Shared wwi As bt
Print "dim wwi as bt end"
Sleep

man vermutet volgende ausgabe:
Zitat:
Erster befehl nach screen open
dim wwi as bt start
Constructor bt
dim wwi as bt end

aber es ist so:
Zitat:
Constructor bt
Erster befehl nach screen open
dim wwi as bt start
dim wwi as bt end
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 05.06.2011, 19:14    Titel: Antworten mit Zitat

Ja, du hast richtig erkannt, dass das SHARED dafür verantwortlich ist. Das liegt daran, dass globale Variablen anders gespeichert werden. Während lokale Variablen im Stack landen, sind globale im Heap.

Für die Praxis bedeutet das, dass die globale Variable zwar erst ab der Deklaration zugänglich ist, allerdings schon vorher initialisiert wird. Sogar noch bevor irgendwas anderes vom Code ausgeführt wird. Das lässt sich mit einer Constructor-Sub sehr gut verdeutlichen:
Code:
Sub start Constructor
   Print "start - der erste code des programms, aber nach der globalen variable"
End Sub

Type bt
   Vari As Integer
   Declare Constructor ()
End Type

Constructor bt()
   Print "Constructor bt"
   Vari = 0
End Constructor

'screen 18
Print "Erster befehl nach screen open"
Print "dim wwi as bt start"
Dim Shared wwi As bt
Print "dim wwi as bt end"
Sleep
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
isiprimax



Anmeldungsdatum: 02.01.2009
Beiträge: 77

BeitragVerfasst am: 05.06.2011, 23:10    Titel: Antworten mit Zitat

Danke wusste ich nicht, fand dazu auch nichts weiter. Habs nun ohne Shared gemacht und es funktioniert, Danke
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