Hauptschleife schmiert ab

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Mok
BotHunter
Beiträge: 1484
Registriert: 26.12.2005 14:14
Computerausstattung: MSI GX780R
Intel Core i5-2410M
Nvidia GT 555M
Windows 7 Home Premium 64 bit
Wohnort:   

Hauptschleife schmiert ab

Beitrag von Mok »

Bild
Beim folgenden Code schmiert die Repeat:Until-Schleife nach kurzer Zeit ab (also der Screen wird weiß, und das Programm freezt). Anm.:Ich benutze die Button-Lib von Josef.
Code: (gekürzt)

Code: Alles auswählen

Procedure.s LRead(String.s) ;Was zum Sprache-auslesen
  Global Word.s = ReadPreferenceString(String,"")
  If Left(Word,1) = "#"
    ProcedureReturn LRead(Right(Word,Len(Word)-1))
  Else
    ProcedureReturn Word
  EndIf
EndProcedure

ProcedureDLL PointColl( x1.l, y1.l, x2.l, y2.l, a2.l, b2.l )
  Protected Coll = #False

  If x1 >= x2 And x1 <= x2 + a2 And y1 >= y2 And y1 <= y2 + b2
    Coll = #True
  EndIf

  ProcedureReturn Coll

EndProcedure

Structure GadgetElement
  SprNr.l
  X.l
  Y.l
  W.l
  H.l
  C1.l
  C2.l
  T.s
EndStructure

Define MX.l     ; Mouse X
Define MY.l     ; Mouse Y
Define MBL.l    ; Mouse Button Left
Define MBR.l    ; Mouse Button Right
Define MOver.l  ; No of Gadget under the Mouse
#No_of_Elements = 3
Global Dim Gadget.GadgetElement ( #No_of_Elements )

Procedure MainMenu()
    Gadget(0)\W  = 128
    Gadget(0)\H  = 32
    Gadget(0)\X  = 10
    Gadget(0)\Y  = _Height/2
    Gadget(0)\C1 = RGB(20,20,200)
    Gadget(0)\C2 = RGB(200,200,30)
    Gadget(0)\T  = LRead("sStart")
    Gadget(0)\SprNr = CreateSprite(#PB_Any,Gadget(0)\W,Gadget(0)\H )
    
    Gadget(1)\W  = 128
    Gadget(1)\H  = 32
    Gadget(1)\X  = 10
    Gadget(1)\Y  = _Height/2+32+10
    Gadget(1)\C1 = RGB(20,20,200)
    Gadget(1)\C2 = RGB(200,200,30)
    Gadget(1)\T  = LRead("sOptions")
    Gadget(1)\SprNr = CreateSprite(#PB_Any,Gadget(1)\W,Gadget(1)\H )
    
    Gadget(2)\W  = 128
    Gadget(2)\H  = 32
    Gadget(2)\X  = 10
    Gadget(2)\Y  = _Height/2+64+10
    Gadget(2)\C1 = RGB(20,20,200)
    Gadget(2)\C2 = RGB(200,200,30)
    Gadget(2)\T  = LRead("sCredits")
    Gadget(2)\SprNr = CreateSprite(#PB_Any,Gadget(2)\W,Gadget(2)\H )
    
    Gadget(3)\W  = 128
    Gadget(3)\H  = 32
    Gadget(3)\X  = 10
    Gadget(3)\Y  = _Height/2+64+32+10
    Gadget(3)\C1 = RGB(20,20,200)
    Gadget(3)\C2 = RGB(200,200,30)
    Gadget(3)\T  = LRead("sEnd")
    Gadget(3)\SprNr = CreateSprite(#PB_Any,Gadget(3)\W,Gadget(3)\H )
    
    StartDrawing(SpriteOutput(Gadget(0)\SprNr))
      DrawingMode(#PB_2DDrawing_Transparent)
      DrawingFont(FontID(0))
      For i = 0 To #No_of_Elements
        Box( 0, 0, Gadget(i)\W  , Gadget(i)\H  , Gadget(i)\C2 )
        Box( 4, 4, Gadget(i)\W-8, Gadget(i)\H-8, Gadget(i)\C1 )
        DrawText( 6,6, Gadget(i)\T, Gadget(i)\C2 )
      Next
    StopDrawing()
  
  exit = 0
  MouseLocate(_Width/2,_Height/2)
  
  Repeat
    ExamineKeyboard()
    ExamineMouse()
    MBL = MouseButton( #PB_MouseButton_Left )
    MBR = MouseButton( #PB_MouseButton_Right )
    DisplayTransparentSprite(#MSpr,MouseX(),MouseY())
    If KeyboardPushed( #PB_Key_Escape )
      EXIT = 1
    EndIf
    ClearScreen(RGB(192,64,32))
  
    MOver = 0
    For i = 0 To #No_of_Elements
      DisplaySprite( Gadget( n )\SprNr, Gadget( n )\X, Gadget( n )\Y )
      If PointColl( MX, MY, Gadget( n )\X, Gadget( n )\Y, Gadget( n )\W, Gadget( n )\H )
          MOver = 0
      EndIf
    Next
    
     StartDrawing( ScreenOutput() )
      DrawingMode( #PB_2DDrawing_Outlined | #PB_2DDrawing_Transparent )
      If MOver > 0
        If MBL
          Box( Gadget( MOver )\X, Gadget( MOver )\Y, Gadget( MOver )\W, Gadget( MOver )\H, $00FFFF )
          DrawText( 1, 1, "Clicked On: " + Str( MOver ), RGB(192,64,32))
        Else
          Box( Gadget( MOver )\X, Gadget( MOver )\Y, Gadget( MOver )\W, Gadget( MOver )\H, $0000FF )
          DrawText( 1, 1, "Mouse Over: " + Str( MOver ), RGB(192,64,32) )
        EndIf
      EndIf
    StopDrawing()
    
    DisplayTransparentSprite(#MSpr,MouseX(),MouseY())
    
    FlipBuffers()
  Until EXIT = 1
EndProcedure
;...
MainMenu()
Also: Das Programm beginnt, NUR der "Ende"-Button wird gerendert und man kann ~ 1 sek mit der Maus rumfahren, bis nix mehr geht. Ich selbst war bisher zu blöd, den Fehler zu finden aber wahrscheinlich denke ich zu kompliziert...

MfG, Mok

Änderung von WPö: Thementitel gemäßigt.
Kommentar von Mok: Hä? Das check ich net. Hieß vorher ja auch schon "Hauptschleife schmiert ab"
Zuletzt geändert von Mok am 11.02.2010 22:27, insgesamt 1-mal geändert.
Win 7 Home Premium 64 bit | PureBasic 5.20 - x86 und x86-64 | Firefox [aktuelle stable-Version hier einfügen]
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Hauptschleife kackt ab

Beitrag von STARGÅTE »

Hast du ein richtigen Screen offen ?

Wenns nur ein WindowedScreen ist dann brauchst du noch ein WindowEvent() in deiner Hauptschleife.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Hauptschleife ...? Ägypten ...?

Beitrag von Kaeru Gaman »

Mok hat geschrieben:Beim folgenden Code ...
läuft ganix, weil die Konstanten nicht definiert sind.

Mensch Mokki, bist du erst seit gestern hier oder warum postest du deine Codes nicht lauffähig und testbar?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Mok
BotHunter
Beiträge: 1484
Registriert: 26.12.2005 14:14
Computerausstattung: MSI GX780R
Intel Core i5-2410M
Nvidia GT 555M
Windows 7 Home Premium 64 bit
Wohnort:   

Re: Hauptschleife schmiert ab

Beitrag von Mok »

Win 7 Home Premium 64 bit | PureBasic 5.20 - x86 und x86-64 | Firefox [aktuelle stable-Version hier einfügen]
"Jeder macht irgendwann mal Fehler, darum gibt's auch Bleistifte mit Radiergummi." --Carl
Antworten