Seite 1 von 1

Hauptschleife schmiert ab

Verfasst: 05.02.2010 18:12
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"

Re: Hauptschleife kackt ab

Verfasst: 05.02.2010 18:19
von STARGÅTE
Hast du ein richtigen Screen offen ?

Wenns nur ein WindowedScreen ist dann brauchst du noch ein WindowEvent() in deiner Hauptschleife.

Hauptschleife ...? Ägypten ...?

Verfasst: 05.02.2010 18:59
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?

Re: Hauptschleife schmiert ab

Verfasst: 05.02.2010 19:34
von Mok