Hey,
ich habe ein Problem, wofür ich einfach keine Lösung finde. Ich werde den Source Code soweit es geht minimieren!
Die Funktion menu() wird nach dem üblichen AutoIt Code (Variablen, GDI+ und so) aufgerufen:
Spoiler anzeigen
Func menu()
While Sleep(10)
_GDIPlus_GraphicsClear($hGraphics, 0xff3D5E91)
menuDraw()
[/autoit] [autoit][/autoit] [autoit]If WinActive($mainGUI) Then menuCheckInput()
[/autoit] [autoit][/autoit] [autoit]; start game
If $gameStarted = True Then ExitLoop
_WinAPI_BitBlt($hDC, 0, 0, $iWidth, $iHeight, $hDC_Buffer, 0, 0, 0x00CC0020)
WEnd
firstTurn()
EndFunc
Über die Funktion menuCheckInput() wird dann die Tastatur abgefragt. Wenn z.B. Enter gedrückt wird, ist $gameStarted = True,
d.h. die Schleife wird verlassen und die Funktion firstTurn() aufgerufen. Sonst wird das Menü dargestellt.
Spoiler anzeigen
Func firstTurn()
; ... Variablen etc.
; dann:
game()
EndFunc
In firstTurn() werden Variablen gesetzt, Timer gestartet etc., dann wird die Funktion des eigentlichen Spiels aufgerufen:
Spoiler anzeigen
Func game()
While Sleep(10)
_GDIPlus_GraphicsClear($hGraphics, 0xffCFDBEC)
Switch $gameState
Case 0
drawGame() ; hier wird das Spiel gezeichnet
Case 1
ExitLoop
; ...
EndSwitch
If WinActive($mainGUI) Then checkInput()
[/autoit] [autoit][/autoit] [autoit]_WinAPI_BitBlt($hDC, 0, 0, $iWidth, $iHeight, $hDC_Buffer, 0, 0, 0x00CC0020)
WEnd
msgbox(0, "", "zum menue") ; zu Testzwecken
menu()
EndFunc
Wenn das Spiel vorbei ist, wird $gameState auf 1 gesetzt, womit die Schleife aus game() verlassen wird und es wieder ins Menü geht.
Alles oben beschriebene funktioniert, aber leider nur ein Mal!
Wenn ein Spiel beendet wurde, man dann also wieder im Menü ist, und man dann ein neues Spiel startet sprich Enter gedrückt wird, wird seltsamerweise - und ich kann es mir einfach nicht erklären warum - immer wieder die msgbox angezeigt (und das Spiel natürlich nicht gestartet).
Ich hoffe, dass ich mein Problem einigermaßen verständlich erläutert habe und mir jemand helfen kann.
Danke!