Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
isiprimax
Anmeldungsdatum: 02.01.2009 Beiträge: 77
|
Verfasst am: 05.06.2011, 02:44 Titel: Constructor Bug? |
|
|
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 |
|
 |
Muttonhead

Anmeldungsdatum: 26.08.2008 Beiträge: 565 Wohnort: Jüterbog
|
Verfasst am: 05.06.2011, 13:43 Titel: |
|
|
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 |
|
 |
isiprimax
Anmeldungsdatum: 02.01.2009 Beiträge: 77
|
Verfasst am: 05.06.2011, 15:16 Titel: |
|
|
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 |
|
 |
XOR
Anmeldungsdatum: 23.07.2010 Beiträge: 161
|
Verfasst am: 05.06.2011, 18:53 Titel: |
|
|
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 |
|
 |
MOD Fleißiger Referenzredakteur

Anmeldungsdatum: 10.09.2007 Beiträge: 1003
|
Verfasst am: 05.06.2011, 19:14 Titel: |
|
|
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 |
|
 |
isiprimax
Anmeldungsdatum: 02.01.2009 Beiträge: 77
|
Verfasst am: 05.06.2011, 23:10 Titel: |
|
|
Danke wusste ich nicht, fand dazu auch nichts weiter. Habs nun ohne Shared gemacht und es funktioniert, Danke |
|
Nach oben |
|
 |
|