
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()
MfG, Mok
Änderung von WPö: Thementitel gemäßigt.
Kommentar von Mok: Hä? Das check ich net. Hieß vorher ja auch schon "Hauptschleife schmiert ab"