Absturz bei ExamineKeyboard()

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Ground0
Beiträge: 318
Registriert: 05.02.2005 02:09
Wohnort: Stilli, Schweiz
Kontaktdaten:

Absturz bei ExamineKeyboard()

Beitrag 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]
Benutzeravatar
captain third
Beiträge: 194
Registriert: 12.12.2004 13:14
Kontaktdaten:

Beitrag 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
Zuletzt geändert von captain third am 05.02.2005 02:23, insgesamt 1-mal geändert.
natoll,jetzt muss ich noch einen Rechner zusammenbaun der 24 stunden am Tag online ist und meinen Server für mein Projekt Order of Blance laufen lässt
Benutzeravatar
Ynnus
Beiträge: 855
Registriert: 29.08.2004 01:37
Kontaktdaten:

Beitrag 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.^^
Benutzeravatar
Ground0
Beiträge: 318
Registriert: 05.02.2005 02:09
Wohnort: Stilli, Schweiz
Kontaktdaten:

*Grins*

Beitrag 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
Benutzeravatar
captain third
Beiträge: 194
Registriert: 12.12.2004 13:14
Kontaktdaten:

Beitrag 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))
natoll,jetzt muss ich noch einen Rechner zusammenbaun der 24 stunden am Tag online ist und meinen Server für mein Projekt Order of Blance laufen lässt
Benutzeravatar
Ground0
Beiträge: 318
Registriert: 05.02.2005 02:09
Wohnort: Stilli, Schweiz
Kontaktdaten:

Beitrag 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
Benutzeravatar
captain third
Beiträge: 194
Registriert: 12.12.2004 13:14
Kontaktdaten:

Beitrag 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
natoll,jetzt muss ich noch einen Rechner zusammenbaun der 24 stunden am Tag online ist und meinen Server für mein Projekt Order of Blance laufen lässt
Benutzeravatar
Ground0
Beiträge: 318
Registriert: 05.02.2005 02:09
Wohnort: Stilli, Schweiz
Kontaktdaten:

Beitrag 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]
Benutzeravatar
Andre
PureBasic Team
Beiträge: 1765
Registriert: 11.09.2004 16:35
Computerausstattung: MacBook Core2Duo mit MacOS 10.6.8
Lenovo Y50 i7 mit Windows 10
Wohnort: Saxony / Deutscheinsiedel
Kontaktdaten:

Beitrag 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.)
Bye,
...André
(PureBasicTeam::Docs - PureArea.net | Bestellen:: PureBasic | PureVisionXP)
Benutzeravatar
Ground0
Beiträge: 318
Registriert: 05.02.2005 02:09
Wohnort: Stilli, Schweiz
Kontaktdaten:

Beitrag von Ground0 »

Danke Andre

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

Gruss Ground0
Antworten