GDI+ Grafik unterschiedlich schnell

  • Hi,

    hab mich jetzt mal an GDI+ versucht und dazu mal das Beispiel aus dem GDI+ Tutorial von Ubuntu angepasst. Problem ist nun allerdings, das die Figur manchmal beim drücken der Pfeiltasten schnell von einem Punkt auf den anderen springt oder generell plötzlich sich schneller bewegt. Woran könnte das liegen?

    Spoiler anzeigen
    [autoit]

    #include <GDIPlus.au3>
    #include <GUIConstantsEx.au3>
    #include <Misc.au3>
    #include <StaticConstants.au3>
    #include <WinAPI.au3>
    #include <WindowsConstants.au3>

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

    OnAutoItExitRegister("_end")

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

    $x = 0
    $y = 0

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

    $Gui = GUICreate("Beispiel", 431, 400)

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

    _GDIPlus_Startup()

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

    $figur = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\test.png")
    $height = _GDIPlus_ImageGetHeight($figur)
    $width = _GDIPlus_ImageGetWidth($figur)
    $verhaelnis = $height / $width

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

    $bk = _GDIPlus_ImageLoadFromFile("back.png")

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

    $graphic = _GDIPlus_GraphicsCreateFromHWND($Gui)
    $bitmap = _GDIPlus_BitmapCreateFromGraphics(431, 400, $graphic)
    $buffer = _GDIPlus_ImageGetGraphicsContext($bitmap);

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

    GUISetState(@SW_SHOW)

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

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    Select
    Case _IsPressed(25)
    If $x > 0 Then
    $x -= 1
    EndIf
    Case _IsPressed(26)
    If $y > 0 Then
    $y -= 1
    EndIf
    Case _IsPressed(27)
    If $x < 410 Then
    $x += 1
    EndIf
    Case _IsPressed(28)
    If $y < 399 Then
    $y += 1
    EndIf
    EndSelect

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

    _GDIPlus_GraphicsDrawImageRect($buffer, $bk, 0, 0, 431, 400)
    _GDIPlus_GraphicsDrawImageRect($buffer, $figur, $x, $y, 20, 20 * $verhaelnis)
    _GDIPlus_GraphicsDrawImage($graphic, $bitmap, 0, 0)
    WEnd

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

    Func _end()
    _GDIPlus_GraphicsDispose($graphic)
    _GDIPlus_GraphicsDispose($buffer)
    _GDIPlus_BitmapDispose($bitmap)
    _GDIPlus_ImageDispose($figur)
    _GDIPlus_ImageDispose($bk)
    _GDIPlus_Shutdown()
    EndFunc ;==>_end

    [/autoit]

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

    Einmal editiert, zuletzt von chip (26. September 2011 um 11:31)

  • Das liegt an der Hauptschleife -> GUIGetMsg()

    Benutze die Opt("GuiOnEventMode", 1) Methode anstelle. Danach sollte der Unterschied weg sein.

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • Kann sein, hab einfach nach chipset und charset bei google gesucht um dummygrafiken zu haben.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.