Bild ohne "Flackern" bewegen

  • Hi,
    Das was ich in der SuFu gefunden hab, hat mir nicht wirklich weiter geholfen. Und zwar will ich ein Bild in meinem Spiel ohne flackern fortbewegen, da das ziemlich stört.

    Spoiler anzeigen
    [autoit]


    ;===========================INCLUDES=============================
    #include <GUIConstantsEx.au3>
    #include <GuiToolbar.au3>
    #include <StaticConstants.au3>
    #include <ToolbarConstants.au3>
    #include <WindowsConstants.au3>
    ;============================INCLUDESENDE========================
    ;============================VARS================================
    $left = 16
    $top = 32
    ;============================VARSENDE============================
    ;============================HOTKEYS=============================
    HotKeySet("{right}", "right")
    HotKeySet("{left}", "left")
    ;============================HOTKEYSENDE=========================
    ;============================GUI=================================
    #Region ### START Koda GUI section ### Form=c:\dokumente und einstellungen\tarek\eigene dateien\autoit\waveright\go.kxf
    $Form1_1 = GUICreate("Wave", 672, 414, 201, 124)
    $Pic1 = GUICtrlCreatePic("C:\Dokumente und Einstellungen\Tarek\Eigene Dateien\AutoIt\WaveRIGHT\pic\attack_01.jpg", 8, 344, 68, 52, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    $ToolBar1 = _GUICtrlToolbar_Create($Form1_1, 0)
    $Pic2 = GUICtrlCreatePic("C:\Dokumente und Einstellungen\Tarek\Eigene Dateien\AutoIt\WaveRIGHT\pic\bar_over.jpg", 0, 312, 670, 20, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    $Pic3 = GUICtrlCreatePic("", 88, 344, 68, 52, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    $Pic4 = GUICtrlCreatePic("", 168, 344, 68, 52, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    $Pic5 = GUICtrlCreatePic("", 248, 344, 68, 52, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    $Pic6 = GUICtrlCreatePic("", 328, 344, 68, 52, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    $Pic7 = GUICtrlCreatePic("", 408, 344, 68, 52, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    $Pic8 = GUICtrlCreatePic("C:\Dokumente und Einstellungen\Tarek\Eigene Dateien\AutoIt\WaveRIGHT\pic\bar_right.jpg", 504, 331, 20, 81, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    $Pic9 = GUICtrlCreatePic("C:\Dokumente und Einstellungen\Tarek\Eigene Dateien\AutoIt\WaveRIGHT\pic\inventar_00.jpg", 540, 344, 44, 44, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    $Pic10 = GUICtrlCreatePic("C:\Dokumente und Einstellungen\Tarek\Eigene Dateien\AutoIt\WaveRIGHT\pic\menu_00.jpg", 600, 344, 44, 44, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    $Pic11 = GUICtrlCreatePic("C:\Dokumente und Einstellungen\Tarek\Eigene Dateien\AutoIt\WaveRIGHT\ani\stand.jpg", 16, 32, 200, 277, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    GUICtrlSetTip(-1, "stand")
    $Pic12 = GUICtrlCreatePic("C:\Dokumente und Einstellungen\Tarek\Eigene Dateien\AutoIt\WaveRIGHT\ani\attack_01.jpg", 16, 32, 200, 277, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    GUICtrlSetState(-1, $GUI_HIDE)
    GUICtrlSetTip(-1, "attack01")
    $Pic13 = GUICtrlCreatePic("C:\Dokumente und Einstellungen\Tarek\Eigene Dateien\AutoIt\WaveRIGHT\ani\attack_02.jpg", 16, 32, 200, 277, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    GUICtrlSetState(-1, $GUI_HIDE)
    GUICtrlSetTip(-1, "attack02")
    $Pic14 = GUICtrlCreatePic("C:\Dokumente und Einstellungen\Tarek\Eigene Dateien\AutoIt\WaveRIGHT\ani\menial_stand.jpg", 448, 32, 200, 277, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    GUICtrlSetTip(-1, "menial_stand")
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
    #Region ### START Koda GUI section ### Form=.\kfx\menu.kxf
    $Form2 = GUICreate("Menü", 153, 231, 447, 289)
    $Button1 = GUICtrlCreateButton("Back", 39, 16, 75, 25, $WS_GROUP)
    $Button2 = GUICtrlCreateButton("Hilfe", 39, 64, 75, 25, $WS_GROUP)
    $Button3 = GUICtrlCreateButton("HotKeys", 39, 96, 75, 25, $WS_GROUP)
    $Button4 = GUICtrlCreateButton("Interface", 39, 128, 75, 25, $WS_GROUP)
    $Button5 = GUICtrlCreateButton("Exit", 39, 160, 75, 25, $WS_GROUP)
    GUISetState(@SW_HIDE, $Form2)
    #EndRegion ### END Koda GUI section ###
    ;============================GUIENDE==============================
    ;============================WHILE================================
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Pic10
    GUISetState(@SW_SHOW, $Form2)
    Case $Button1
    GUISetState(@SW_HIDE, $Form2)
    Case $Button5
    Exit
    Case $Pic1
    GUICtrlSetPos($Pic11, $left, $top)
    GUICtrlSetPos($Pic12, $left, $top)
    GUICtrlSetPos($Pic13, $left, $top)
    GUICtrlSetState($Pic11, 32)
    GUICtrlSetState($Pic12, 16)
    Sleep(100)
    GUICtrlSetState($Pic12, 32)
    GUICtrlSetState($Pic13, 16)
    Sleep(100)
    GUICtrlSetState($Pic13, 32)
    GUICtrlSetState($Pic11, 16)

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

    EndSwitch
    WEnd
    ;===========================WHILEENDE==============================
    ;===========================FUNCS==================================
    Func right()
    $left = $left + 10
    GUICtrlSetPos($Pic11, $left, $top)
    EndFunc
    Func left()
    $left = $left - 10
    GUICtrlSetPos($Pic11, $left, $top)
    EndFunc
    ;===========================FUNCSENDE==============================

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

    Thx schonmal im Vorraus
    Mfg Nakroma

  • Hi,
    hab dir mal schnell was gebaut:

    Spoiler anzeigen
    [autoit]

    #include <GDIPlus.au3>
    _GDIPlus_Startup()

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

    $hGUI = GUICreate("", 500, 500)
    GUISetState()

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

    $hGr_Frontbuffer = _GDIPlus_GraphicsCreateFromHWND($hGUI)

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

    $hBitmap_Backbuffer = _GDIPlus_BitmapCreateFromGraphics(500, 500, $hGr_Frontbuffer)
    $hGr_Backbuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap_Backbuffer)

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

    $hImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\merlin.gif")

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

    For $x = 50 To 250
    _GDIPlus_GraphicsClear($hGr_Backbuffer, 0xFFFFFFFF)
    _GDIPlus_GraphicsDrawImage($hGr_Backbuffer, $hImage, $x, 100)
    _GDIPlus_GraphicsDrawImage($hGr_Frontbuffer, $hBitmap_Backbuffer, 0, 0)
    Next

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

    While GUIGetMsg() <> -3
    WEnd

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

    _GDIPlus_GraphicsDispose($hGr_Frontbuffer)
    _WinAPI_DeleteObject($hBitmap_Backbuffer)
    _GDIPlus_GraphicsDispose($hGr_Backbuffer)
    _GDIPlus_ImageDispose($hImage)
    _GDIPlus_Shutdown()

    [/autoit]

    Jaja sieht wüst aus aber ich hab schon ewig nichts mehr mit GDI+ gemacht ;) Hab den Code mal vereinfacht
    PS: Hier gibts ein GDI+ Tutorial

  • Ich bin mir nicht sicher ob es bei Bildern auch geht aber du kannst mal versuchen vor dem verschieben Guisetstate(@sw_Lock) und danach Guisetstate(@sw_Unlock) in dein Script zu packen.

  • probier mal das beispiel hier. musst nur die bilderangaben so ändern das es halt existierende bilder sind:

    [autoit]

    $egg = GUICreate("Easteregg", 242, 127, -1, -1)
    $egg2 = GUICtrlCreatePic (@ScriptDir & "\a.jpg", 65, 130, 112, 74)
    $egg3 = GUICtrlCreatePic (@ScriptDir & "\a1.jpg", 65, 214, 112, 74)
    $egg4 = GUICtrlCreatePic (@ScriptDir & "\a2.jpg", 65, 298, 112, 74)
    $c50 = GUICtrlCreatelabel ("Easteregg", 1, 127)
    GuiSetState(@sw_show, $egg)
    $ipegg = 130
    Do
    ControlMove ("Easteregg", "Easteregg", $egg2, 65, $ipegg)
    ControlMove ("Easteregg", "Easteregg", $egg3, 65, $ipegg + 84)
    ControlMove ("Easteregg", "Easteregg", $egg4, 65, $ipegg + 168)
    sleep(20)
    $ipegg -= 1
    Until $ipegg <= -243

    [/autoit]
  • Selbst wenn ich hundertmal draufdrücke passier nix

    also wenn du willst das sich das bild bei jedem klick weiterbewegt versuch es mal so:

    [autoit]

    Func right(byref $left)
    $left = $left + 10
    ControlMove("human", "stand", $Pic11, $left, $top)
    EndFunc

    [/autoit]

    halt den funktionsaufruf dann so: right($left)