Seite 1 von 2

Absturz bei ExamineKeyboard()

Verfasst: 05.02.2005 02:16
von Ground0
Hallo

Habe das Problem bei mir sobald ich ExamineKeyboard() benutze das Programm einfach Abstürzt und der schöne Asistent von WXP kommt ob man den fehler an M$ senden möchte...

Der Problem Teil (ist das ExamineKeyboard() weg machts keinen Fehler mer aber die ESC funktion geht dan auch nicht mer :twisted: )

Code: Alles auswählen


Gosub Bild_Refresh 

Repeat
  
  ExamineKeyboard()
  
  Delay(10)
Until KeyboardPushed(#PB_Key_Escape)
Weis dazu jemand rat?[/code]

Verfasst: 05.02.2005 02:22
von captain third
komüscher schnipsel

ich würde sagen es liegt an InitKeyboard() des muss noch vor ExamineKeyboard() irgendwo erscheinen(aber nicht in der hauptschleife)

Ps.: des ist meine erste sinnvolle antwort :mrgreen:

[Edit]
achja und das Gosub muss weg...des ist sowiso böse

Verfasst: 05.02.2005 02:23
von Ynnus
Die Tastatur wurde auch korrekt mit InitKeyboard initialisiert? Und es ist auch ein Screen geöffnet? Ansonsten wäre das sicherlich das erste Mal, dass ExamineKeyboard() zum direkten Absturz führt. Schau mal ob's nicht vielleicht was mit dem Gosub zu tun hat. Solche Unterpunkte per Goto anzuspringen würde ich sowieso ganz vermeiden und lieber Prozeduren nehmen. Oder poste mal den ganzen Code, damit wir's selber ausführen können (wenn's nicht zu groß ist).

//EDIT: Zu spät... -__-

BTW.: Wo sind die Postingzahlen hin? Sieht so leer aus bei meinem Vorposter.^^

*Grins*

Verfasst: 05.02.2005 02:29
von Ground0
Hehe wolte mir den Hon erspahren für diesen Anfang aber was sols hier der Komplette Code....

Code: Alles auswählen

;3D-Engine

;Grund Initialisierung
If InitEngine3D()=0
  MessageRequester("Fehler","3D Engine konte nicht Initialisiert werden", #PB_MessageRequester_Ok)
  End
EndIf
If InitSprite()=0
  MessageRequester("Fehler","Sprite Engine konte nicht Initialisiert werden", #PB_MessageRequester_Ok)
  End
EndIf
InitMouse()
InitKeyboard()
;FrontColor(255,255,255)

;Font Initialisierung
LoadFont (0, "Courier", 12)          ;Courier 12 Pixel

;Fullscreen Fenster öffnen.
If OpenScreen(1024,768,32,"3D-Engine Test")=0
  MessageRequester("Fehler","Fullscreen Modus konte nicht Initialisiert werden bei 1024*768*32", #PB_MessageRequester_Ok)
  End
EndIf


;Hauptroutine für die Engine

Gosub Bild_Refresh 

Repeat
  
  ExamineKeyboard()
  
  Delay(10)
Until KeyboardPushed(#PB_Key_Escape)

End


;Bild Refresch Routine.
Bild_Refresh:
 If StartDrawing(1)            
  DrawingMode(1)                          
  DrawingFont(UseFont(0))                 
  Locate(10, 10)                          
  DrawText("3D-Engine Test")    

  StopDrawing()                           
 EndIf                                    
Return 
/:-> Ehm ja will eine 3D-Engine für mein 3D-Spiel Programmieren nachdem ich das in DarkBASIC aufgegeben habe wegen der Riesen Programmgröse........

Gruss

Verfasst: 05.02.2005 02:35
von captain third
ich glaube es liegt an gosub

weil beim gosub geht der doch runter zu der sprungmarke,und durch das return wieder zu gosub,der kommt die in die hauptschleife an,ich würde es anderst schreiben,und zwar ohne gosub ( gosub und goto sind die zwei böööösesten befehle überhaupt (hab ich in meinen 10 jahren gelernt))

Verfasst: 05.02.2005 02:39
von Ground0
Hmmm....

Das kapier ich jetzt net.... der Gosub ist Tatsächlich schuld an allem....
Nur noch sone Intressens Frage weshalb geht das in PureBasic nicht so?

:freak: Das mit Goto und Gosub ist noch so eine C64 Eigenart von mir und BASICA von IBM :twisted:


Gruss Ground0

Verfasst: 05.02.2005 02:41
von captain third
programmabstürze hatte ich auch schon oft mit gosub oder goto...seit mir das richtig erklärt wordn ist benutze ich Select - Endselect also cases...

ne ziemlich dolle sache

BasicA habe ich auch gelernt,und da gabs nu nich wirklich viele befehle,da konnte man nur mit goto rumspringen wie man will,anderst ging es damit nicht

Verfasst: 05.02.2005 02:48
von Ground0
Ich kapier das jetzt aber wircklich net....

Code: Alles auswählen

;3D-Engine

;Grund Initialisierung
If InitEngine3D()=0
  MessageRequester("Fehler","3D Engine konte nicht Initialisiert werden", #PB_MessageRequester_Ok)
  End
EndIf
If InitSprite()=0
  MessageRequester("Fehler","Sprite Engine konte nicht Initialisiert werden", #PB_MessageRequester_Ok)
  End
EndIf
InitMouse()
InitKeyboard()
Declare Bild_Refresh()
;FrontColor(255,255,255)

;Font Initialisierung
LoadFont (0, "Courier", 12)          ;Courier 12 Pixel

;Fullscreen Fenster öffnen.
If OpenScreen(1024,768,32,"3D-Engine Test")=0
  MessageRequester("Fehler","Fullscreen Modus konte nicht Initialisiert werden bei 1024*768*32", #PB_MessageRequester_Ok)
  End
EndIf


;Hauptroutine für die Engine

Bild_Refresh() 

Repeat
  
  ExamineKeyboard()
  
  Delay(10)
Until KeyboardPushed(#PB_Key_Escape)

End


;Bild Refresch Routine.
Procedure  Bild_Refresh()
 If StartDrawing(1)            
  DrawingMode(1)                          
  DrawingFont(UseFont(0))                 
  Locate(10, 10)                          
  DrawText("3D-Engine Test")    

  StopDrawing()                           
 EndIf                                    
EndProcedure
Was ist hier so Falsch das das wieder mit einem Absturz endet Debuger findet nichts :evil: mit oder ohne ExamineKeyboard() .....

Gruss Ground0

[edit] PS:Zum Testen obs der Gosub war oder nicht habe ich den Gosub befehl einfach geremarkt.... [/Edit]

Verfasst: 05.02.2005 02:50
von Andre
So geht's:

Code: Alles auswählen

;3D-Engine 

;Grund Initialisierung 
If InitEngine3D()=0 
  MessageRequester("Fehler","3D Engine konte nicht Initialisiert werden", #PB_MessageRequester_Ok) 
  End 
EndIf 
If InitSprite()=0 
  MessageRequester("Fehler","Sprite Engine konte nicht Initialisiert werden", #PB_MessageRequester_Ok) 
  End 
EndIf 
InitMouse() 
InitKeyboard() 
;FrontColor(255,255,255) 

;Font Initialisierung 
LoadFont (0, "Courier", 12)          ;Courier 12 Pixel 

;Fullscreen Fenster öffnen. 
If OpenScreen(1024,768,32,"3D-Engine Test")=0 
  MessageRequester("Fehler","Fullscreen Modus konte nicht Initialisiert werden bei 1024*768*32", #PB_MessageRequester_Ok) 
  End 
EndIf 


;Hauptroutine für die Engine 

Repeat 
  FlipBuffers()            ; ******
  ClearScreen(0,0,0)          ; ******
  Gosub Bild_Refresh            ; ******

  
  ExamineKeyboard() 
  
  Delay(1)        ; ******
Until KeyboardPushed(#PB_Key_Escape) 

End 


;Bild Refresch Routine. 
Bild_Refresh: 
If StartDrawing(ScreenOutput())        ; ******
  DrawingMode(1)                          
  DrawingFont(UseFont(0))                  
  Locate(10, 10)  
  FrontColor(255,20,20)            ; ******
  DrawText("3D-Engine Test")    

  StopDrawing()                            
 EndIf                                    
Return 
Änderungen sind mit ; ****** markiert.

Einfach durch Abgleich des richtigen Einsatzes der Befehle mit der Anleitung... :wink:
(StartDrawing z.B., da steht drin dass der Ausgabekanal z.B. mit ScreenOutput() erstmal festgelegt werden muss.)

Verfasst: 05.02.2005 02:59
von Ground0
Danke Andre

mit deinen Enderungen funktionierts jetzt.... Puh.... aber habe es in die Procedure dings übernommen.... :-D

Gruss Ground0