Hey ich hab ein kleinen Spiel geschrieben, jedoch kann ich die Ziele nicht neuzeichen lassen, da ich die Variable nicht verwenden kann...
Spoiler anzeigen
#region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Change2CUI=y
#AutoIt3Wrapper_Add_Constants=n
#endregion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <Array.au3>
#include <GDIPlus.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GDIPlus.au3>
Opt("GUIOnEventMode", 1)
OnAutoItExitRegister("__GDIPlus_Shutdown")
_GDIPlus_Startup()
[/autoit] [autoit][/autoit] [autoit]Global $iWidth = 500, $iHeight = 500
$GUI_Back_Color = 0xFF000000 + 0xF0F0F0
$hGUI = GUICreate("", $iWidth, $iHeight, 400, 100, $WS_POPUP)
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
;Erstmal das normale Grafik-Objekt erstellen.
$hBitmap = _GDIPlus_BitmapCreateFromGraphics($iWidth, $iHeight, $hGraphic)
;Statt uns mit dem normalen Frontbuffer zufrieden zu geben, erstellen wir erstmal eine
;Bitmap, mit Bezug auf unser Grafikobjekt.
$hBackbuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)
$sImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\hintergrund.jpg")
$kImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\Fadenkreuz.png")
$hImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\ziel.jpg") ; Lädt das Bild Image.gif aus dem ScriptDir Ordner
;Nachdem unser Bitmap erstellt ist, holen wir uns den Graphics Context. Dieser
;wird von uns verwendet, um darin zu zeichnen.
GUISetOnEvent(-3, "_Exit")
GUIRegisterMsg($WM_PAINT, "WM_PAINT")
GUISetState()
_FUNC()
Func _FUNC()
Global $ran1 = Random(0, 400, 1)
Global $ran2 = Random(0, 400, 1)
_GDIPlus_GraphicsClear($hBackbuffer, $sImage)
[/autoit] [autoit][/autoit] [autoit]; Super Radierer benutzen um alten Backbuffer zu löschen
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]_WinAPI_RedrawWindow($hGUI, 0, 0, $RDW_INTERNALPAINT)
_GDIPlus_GraphicsDrawImageRect($hBackbuffer, $sImage, 0, 0, 500, 500)
_GDIPlus_GraphicsDrawImageRect($hBackbuffer, $hImage, $ran1, $ran2, 40, 50)
_WinAPI_RedrawWindow($hGUI, 0, 0, $RDW_INTERNALPAINT)
; WM_PAINT wird nur aufgerufen, wenn alle Berechnungen fertig sind!
; In WM_PAINT wird selbst nichts berechnet, oder gezeichnet. diese Funktion wird nur das
; Bitmap-Objekt in das Grafik-Objekt übertragen.
While 1
$pos = GUIGetCursorInfo()
If IsArray($pos) Then
_GDIPlus_GraphicsDrawImageRect($hBackbuffer, $kImage, $pos[0] - 14, $pos[1] - 15, 30, 30)
_WinAPI_RedrawWindow($hGUI, 0, 0, $RDW_INTERNALPAINT)
EndIf
$mouse = GUIGetCursorInfo($hGUI)
If IsArray($mouse) Then
If $mouse[2] = 1 Then
If $mouse[0] > $ran1 And $mouse[0] < $ran1 + 40 And $mouse[1] > $ran2 And $mouse[1] < $ran2 + 50 Then
;~ If $mouse[0] > $ran1 and $mouse[0] < $ran1 + 40 And $mouse[1] > $ran2 and $mouse[1] < $ran2 + 50 Then
_FUNC()
EndIf
EndIf
EndIf
WEnd
EndFunc ;==>_FUNC
; -----------------> X
;|
;|
;|
;|
;|
;v
;Y
Func _Exit()
Exit
EndFunc ;==>_Exit
Func WM_PAINT()
_GDIPlus_GraphicsDrawImageRect($hGraphic, $hBitmap, 0, 0, $iWidth, $iHeight)
$pos = GUIGetCursorInfo()
If IsArray($pos) Then
_GDIPlus_GraphicsDrawImageRect($hBackbuffer, $kImage, $pos[0] - 14, $pos[1] - 15, 30, 30)
_WinAPI_RedrawWindow($hGUI, 0, 0, $RDW_INTERNALPAINT)
EndIf
_GDIPlus_GraphicsDrawImageRect($hBackbuffer, $sImage, 0, 0, 500, 500)
; _GDIPlus_GraphicsDrawImageRect() überträgt den Backbuffer in den Frontbuffer.
; Der erste Parameter ist unser Frontbuffer (Grafik Objekt).
; Der zweite ist unsere Bitmap, welche ja als BackBuffer fungiert.
; Darauf folgt der Abschnitt den man übertragen will.
; i.d.R. ist es 0, 0 für X und Y koordinaten, und die GUI Breite und Höhe für
; Width und Height. Kommt natürlich immer drauf an, wie groß euer Grafikobjekt ist,
; und ob ihr den vollen Teil zeichnen wollt.
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_PAINT
Func __GDIPlus_Shutdown()
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_BitmapDispose($hBitmap)
_GDIPlus_Shutdown()
EndFunc ;==>__GDIPlus_Shutdown