Hey,
Ich wollte gerne mein eigendes Defender spiel schreiben, mein erster versuch war einfach nur mit GUICtrlSetPos doch das flakern hat mich aufgeregt. Deswegen habe ich googelt wie man es lösen kan & ich kam zu GDIPlus. Ich habe bereits ein Hintergrund, wo die Gegner herlaufen, und auch bereits einen gegner der die strecke lang läuft. Doch leider läst er sich ja nicht löschen, wenn ich ihn gekillt habe oder er durch gekommen ist. Ich weiß auch nicht wie ich ihn auf den hintergrund übermalen kan...
Spoiler anzeigen
Das sind bilder von dem Spiel, der code:
Spoiler anzeigen
#include <GuiConstants.au3>
#include <GdiPlus.au3>;das include
#include <Misc.au3>
OnAutoItExitRegister("_end") ; die Funktion _end am Ende des Scriptes ausführen
Opt("GUIOnEventMode", 1)
HotKeySet("{ENTER}","_WaveStart")
Global $GegnerX = -50
Global $GegnerY = 79
Global $Start = False
$Gui = GUICreate("Beispiel", 1000, 600)
GUISetState(@SW_SHOW)
_GDIPlus_Startup() ;Gdi starten
[/autoit] [autoit][/autoit] [autoit]$Map = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\Map.jpg")
$graphic = _GDIPlus_GraphicsCreateFromHWND($Gui)
_GDIPlus_GraphicsDrawImageRect($graphic, $Map, 0, 0, 800, 600) ;die Figur wird an der neuen Position gezeichnet
$hGraphic = _GDIPlus_GraphicsCreateFromHWND($Gui);noramle Grafik erstellen
$hBitmap = _GDIPlus_BitmapCreateFromGraphics(800, 600, $hGraphic);Buffer erstellen Schritt 1...
$hBuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap);...und 2
GUISetOnEvent($GUI_EVENT_CLOSE, "_end")
While 1
If $Start = True Then
_Move()
_GDIPlus_GraphicsDrawImageRect($hBuffer, $Map, 0, 0, 800, 600);mit Buffer
_GDIPlus_GraphicsDrawImageRect($hBuffer, $Gegner, $GegnerX, $GegnerY, 50, 50)
_GDIPlus_GraphicsDrawImageRect($hGraphic, $hBitmap, 0, 0, 800, 600)
EndIf
WEnd
Func _Move()
if $GegnerX >= 635 and $GegnerY >= 436 Then
_GDIPlus_GraphicsClear($hBuffer, 0xFF000000 + 0xF0F0F0)
ElseIf $GegnerY = 79 and $GegnerX <= 648 Then
$GegnerX = $GegnerX + 4
ElseIf $GegnerX = 650 and $GegnerY <= 240 Then
$GegnerY = $GegnerY + 4
ElseIf $GegnerY = 243 and $GegnerX >= 115 Then
$GegnerX = $GegnerX - 4
ElseIf $GegnerX = 114 and $GegnerY <= 435 Then
$GegnerY = $GegnerY + 4
ElseIf $GegnerY = 439 and $GegnerX <= 637 Then
$GegnerX = $GegnerX + 4
EndIf
EndFunc
Func _WaveStart()
HotKeySet("{ENTER}")
Global $Gegner = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\Gegner1.jpg")
_GDIPlus_GraphicsDrawImageRect($hBuffer, $Gegner, $GegnerX, $GegnerY, 20, 20)
$Start = True
EndFunc
Func _end();die Exit funktion
_GDIPlus_GraphicsDispose($graphic);Grafik Objekt freigeben
_GDIPlus_ImageDispose($Map);Bild Objekt freigeben
_GDIPlus_Shutdown();Ressourcen freigeben
Exit
EndFunc ;==>_end
Da ich heute erst mit GDIPlus angefangen sind stamm viel aus dem Tut hier im forum
& Meine 2te frage, ist es möglich mehrere Gegner ans laufen zu bringen? Mit einem ist das ja zimlich langweilig
MfG Nico