Ein gutes GDI+ Bsp fand ich beim aufräumen meines Desktops, das hatte ich bereits (aber die "mit wand") bbm1995 gegeben.
Es ist eigentlich recht cool, denn es klappt sogar
Ich kann nicht beschreiben wie es geht, man läuft halt durch das eine Ende der Gui und kommt am anderen Ende wieder raus.
Ihr denkt das ist nichts besonderes, ist es auch nicht, allerdings kann man sich sozusagen "Teilen"
(ja es ist schwer zu beschreiben)
Skript
#include <GDIPlus.au3>
#include <Misc.au3>
_GDIPlus_Startup()
Global $Width = 200, $Height = 200, $X = 0, $Y = 0
$GUI = GUICreate("Game", $Width, $Height)
GUISetState(@SW_SHOW)
$Graphic = _GDIPlus_GraphicsCreateFromHWND($GUI) ;Frontbuffer
$Bitmap = _GDIPlus_BitmapCreateFromGraphics($Width, $Height, $Graphic) ;Bitmap für Frontbuffer
$Backbuffer = _GDIPlus_ImageGetGraphicsContext($Bitmap) ;Backbuffer
While 1
Sleep(10)
Switch GUIGetMsg()
Case -3
Exit
EndSwitch
_ReDraw()
WEnd
Func _ReDraw()
_Bewegung()
_GDIPlus_GraphicsClear($Backbuffer, 0xFFEFEBDE)
_MinusX_Draw()
_PlusX_Draw()
_MinusY_Draw()
_PlusY_Draw()
_GDIPlus_GraphicsFillRect($Backbuffer, $X, $Y, 20, 20)
_GDIPlus_GraphicsDrawImageRect($Graphic, $Bitmap, 0, 0, $Width, $Height)
EndFunc ;==>_ReDraw
Func _Bewegung()
If _IsPressed("25") Then; Links
If $X + 20 <= 0 Then
$X = 200 - 20
Else
$X -= 2
EndIf
ElseIf _IsPressed("26") Then;Oben
If $Y + 20 <= 0 Then
$Y = 200 - 20
Else
$Y -= 2
EndIf
ElseIf _IsPressed("27") Then;Rechts
If $X >= $Width Then
$X = 0
Else
$X += 2
EndIf
ElseIf _IsPressed("28") Then;Unten
If $Y >= $Height Then
$Y = 0
Else
$Y += 2
EndIf
EndIf
EndFunc ;==>_Bewegung
Func _MinusX_Draw()
Local $MinusX = 0 - $X
If $MinusX >= 0 Then
_GDIPlus_GraphicsFillRect($Backbuffer, $Width - $MinusX, $Y, 20, 20)
EndIf
EndFunc ;==>_MinusX_Draw
Func _PlusX_Draw()
Local $PlusX = $X - $Width
If $PlusX <= 0 Then
_GDIPlus_GraphicsFillRect($Backbuffer, 0 + $PlusX, $Y, 20, 20)
EndIf
EndFunc ;==>_PlusX_Draw
Func _MinusY_Draw()
Local $MinusY = 0 - $Y
If $MinusY >= 0 Then
_GDIPlus_GraphicsFillRect($Backbuffer, $X, $Height - $MinusY, 20, 20)
EndIf
EndFunc ;==>_MinusY_Draw
Func _PlusY_Draw()
Local $PlusY = $Y - $Height
If $PlusY <= 0 Then
_GDIPlus_GraphicsFillRect($Backbuffer, $X, 0 + $PlusY, 20, 20)
EndIf
EndFunc ;==>_PlusY_Draw
PS: Wer mir sagen will, das Bild unten im Anhang ist ein Skriptfehler / Skriptschlampigkeit, der sagt schwachsinn, denn es spiegelt nur das original
MfG EM