GDI+ Wieso flackert es?

  • Wieso flackert das script bei mir?

    Spoiler anzeigen
    [autoit]

    #include
    #include
    #include
    #include

    [/autoit] [autoit][/autoit] [autoit]

    $dll = DllOpen("user32.dll")

    [/autoit] [autoit][/autoit] [autoit]

    Global $iX1 = 100 ;X Koordinate der Startposition des Spielers
    Global $iY1 = 320 ;Y Koordinate der Startposition des Spielers
    Global $Speed = 2 ;Geschwindigkeit des Spielers in Pixeln pro Bewegung

    [/autoit] [autoit][/autoit] [autoit]

    Global $MinX = 0 ;Legt das linke Ende des Raums fest
    Global $MaxX = 633 ;Legt das rechte Ende des Raums fest
    Global $MinY = 0 ;Legt das obere Ende des Raums fest
    Global $MaxY = 447 ;Legt das untere Ende des Raums fest

    [/autoit] [autoit][/autoit] [autoit]

    $Gui = GUICreate("Dragonfight 2D", 633, 447, 330, 173)
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    _GDIPlus_Startup()

    [/autoit] [autoit][/autoit] [autoit]

    ;Buffer damit alles besser dargestellt wird.
    $HOG = _GDIPlus_GraphicsCreateFromHWND($Gui)
    $BUFF = _GDIPlus_BitmapCreateFromGraphics(633,477,$HOG)
    $DRAWER = _GDIPlus_ImageGetGraphicsContext($BUFF)
    ;Ende des Buffens

    [/autoit] [autoit][/autoit] [autoit]

    _GDIPlus_GraphicsClear($HOG,0xFFFFFFFF);BG setzen

    [/autoit] [autoit][/autoit] [autoit]

    ;Farben
    $Red = _GDIPlus_BrushCreateSolid(0xFFFF0000)
    $Blue = _GDIPlus_BrushCreateSolid(0xFF0000FF)
    $Yellow = _GDIPlus_BrushCreateSolid(0xFFFF00)
    $Pink = _GDIPlus_BrushCreateSolid(0xFFFF00FF)
    $Green = _GDIPlus_BrushCreateSolid(0xFF00FF00)
    $Black = _GDIPlus_BrushCreateSolid(0xFF000000)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    AdlibRegister("Reload", 35)

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    AdlibUnRegister()
    _GDIPlus_GraphicsDispose($HOG)
    _GDIPlus_GraphicsDispose($BUFF)
    _GDIPlus_BitmapDispose($DRAWER)
    _GDIPlus_Shutdown()
    DllClose($dll)
    _GDIPlus_Shutdown()
    Exit

    [/autoit] [autoit][/autoit] [autoit]

    EndSwitch
    If _IsPressed("25", $dll) Then _WalkLeft()
    If _IsPressed("26", $dll) Then _WalkUp()
    If _IsPressed("27", $dll) Then _WalkRight()
    If _IsPressed("28", $dll) Then _WalkDown()
    WEnd

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func Reload()
    _GDIPlus_GraphicsClear($HOG, 0xFFF0F0F0);BG setzen
    _GDIPlus_GraphicsFillRect($HOG, $iX1, $iY1, 12, 20)
    _GDIPlus_GraphicsDrawImageRect($HOG, $BUFF, 0, 0, 625, 443) ;Zeichnet den Buffer auf die Grafik der GUI
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _WalkLeft()
    If $iX1 > $MinX Then $iX1 -= $Speed
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _WalkRight()
    If $iX1 < $MaxX Then $iX1 += $Speed
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _WalkUp()
    If $iY1 > $MinY Then $iY1 -= $Speed
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _WalkDown()
    If $iY1 < $MaxY Then $iY1 += $Speed
    EndFunc

    [/autoit]


    Edit Oscar: Post wiederhergestellt.

    5 Mal editiert, zuletzt von masteraki (18. März 2010 um 15:31)

  • Spoiler anzeigen

    Grundkenntnisse in: C++, JavaScript
    Sehr gute Kenntnisse: PHP, JAVA, C und näturlich AutoIt


    Klaviatur, Anhang UDF, GDI+ Mühle

    Zitat

    "Wenn einen um 20h der Pizzadienst anruft und fragt, ob man's nur vergessen hat und ob man das gleiche
    möchte wie immer -- dann sollte man sein Bestellverhalten evtl überdenken"

  • Könntest du bitte den ersten Post lassen?
    Dann wissen andere noch worum es geht.
    Mit einem Klick auf editieren kannst du den Thread als "gelöst" makieren.
    Danke :D

  • Ich empfehle übrigens den OnEvent Modus. Starte dein Script mal und halte die Pfeiltaste gedrückt.
    Wenn du ein bisschen gelaufen bist, bewege mal testweise die Maus übers GUI ;)

    DIeser Boost kommt daher, dass GUIGetMsg() dann die Auto-Handbremse ausschaltet.
    Lieber direkt im OnEvent Mode und du hast diese Probleme erst garnicht.

  • Danke Man Danke das habe ich garde gesucht ^^
    €.Hmpf kriegs net hin kannste mir ma please helfen den on event einzubauen?

  • Spoiler anzeigen
    [autoit]

    #include <GDIPlus.au3>
    #include <GUIConstantsEx.au3>
    #include <Misc.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Opt("GUIOnEventMode", 1)

    [/autoit] [autoit][/autoit] [autoit]

    $dll = DllOpen("user32.dll")

    [/autoit] [autoit][/autoit] [autoit]

    Global $iX1 = 100 ;X Koordinate der Startposition des Spielers
    Global $iY1 = 320 ;Y Koordinate der Startposition des Spielers
    Global $Speed = 2 ;Geschwindigkeit des Spielers in Pixeln pro Bewegung

    [/autoit] [autoit][/autoit] [autoit]

    Global $MinX = 0 ;Legt das linke Ende des Raums fest
    Global $MaxX = 621 ;Legt das rechte Ende des Raums fest (GUI Breite - Spieler Breite)
    Global $MinY = 0 ;Legt das obere Ende des Raums fest
    Global $MaxY = 427 ;Legt das untere Ende des Raums fest (GUI Höhe - Spieler Höhe)

    [/autoit] [autoit][/autoit] [autoit]

    $Gui = GUICreate("Dragonfight 2D", 633, 447, 330, 173)
    GUISetOnEvent(-3, "_Eventhandler")
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    _GDIPlus_Startup()

    [/autoit] [autoit][/autoit] [autoit]

    ;Buffer damit alles besser dargestellt wird.
    $HOG = _GDIPlus_GraphicsCreateFromHWND($Gui)
    $BUFF = _GDIPlus_BitmapCreateFromGraphics(633, 477, $HOG)
    $DRAWER = _GDIPlus_ImageGetGraphicsContext($BUFF)
    ;Ende des Buffens

    [/autoit] [autoit][/autoit] [autoit]

    _GDIPlus_GraphicsClear($HOG, 0xFFFFFFFF);BG setzen

    [/autoit] [autoit][/autoit] [autoit]

    ;Farben
    $Red = _GDIPlus_BrushCreateSolid(0xFFFF0000)
    $Blue = _GDIPlus_BrushCreateSolid(0xFF0000FF)
    $Yellow = _GDIPlus_BrushCreateSolid(0xFFFF00)
    $Pink = _GDIPlus_BrushCreateSolid(0xFFFF00FF)
    $Green = _GDIPlus_BrushCreateSolid(0xFF00FF00)
    $Black = _GDIPlus_BrushCreateSolid(0xFF000000)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    AdlibRegister("Reload", 35)

    [/autoit] [autoit][/autoit] [autoit]

    While 1 * Sleep(10)
    If _IsPressed("25", $dll) Then _WalkLeft()
    If _IsPressed("26", $dll) Then _WalkUp()
    If _IsPressed("27", $dll) Then _WalkRight()
    If _IsPressed("28", $dll) Then _WalkDown()
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _Eventhandler()
    Switch @GUI_CtrlId
    Case $GUI_EVENT_CLOSE
    AdlibUnRegister()
    _GDIPlus_GraphicsDispose($HOG)
    _GDIPlus_GraphicsDispose($BUFF)
    _GDIPlus_BitmapDispose($DRAWER)
    DllClose($dll)
    _GDIPlus_Shutdown()
    Exit
    EndSwitch
    EndFunc ;==>_Eventhandler

    [/autoit] [autoit][/autoit] [autoit]

    Func Reload()
    _GDIPlus_GraphicsClear($HOG, 0xFFF0F0F0);BG setzen
    _GDIPlus_GraphicsFillRect($HOG, $iX1, $iY1, 12, 20)
    _GDIPlus_GraphicsDrawImageRect($HOG, $BUFF, 0, 0, 625, 443) ;Zeichnet den Buffer auf die Grafik der GUI
    EndFunc ;==>Reload

    [/autoit] [autoit][/autoit] [autoit]

    Func _WalkLeft()
    If $iX1 > $MinX Then $iX1 -= $Speed
    EndFunc ;==>_WalkLeft

    [/autoit] [autoit][/autoit] [autoit]

    Func _WalkRight()
    If $iX1 < $MaxX Then $iX1 += $Speed
    EndFunc ;==>_WalkRight

    [/autoit] [autoit][/autoit] [autoit]

    Func _WalkUp()
    If $iY1 > $MinY Then $iY1 -= $Speed
    EndFunc ;==>_WalkUp

    [/autoit] [autoit][/autoit] [autoit]

    Func _WalkDown()
    If $iY1 < $MaxY Then $iY1 += $Speed
    EndFunc ;==>_WalkDown

    [/autoit]