GDI+ Beginner -.-

  • [autoit]


    #include <GDIPlus.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    HotKeySet ("1", "_Exit")
    $Width = 353
    $Height = 501
    $dHeight = 1
    $dWidth = 1
    $GUI_Back_Color = 0xFF000000 + 0xF0F0F0
    _GDIPlus_StartUp()
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Worms AutoIt", 353, 501, 450, 167)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
    $Graphic = _GDIPlus_GraphicsCreateFromHWND($Form1)
    $Bitmap = _GDIPlus_BitmapCreateFromGraphics($Width, $Height, $Graphic)
    $Backbuffer = _GDIPlus_ImageGetGraphicsContext($Bitmap)
    _GDIPlus_GraphicsDrawRect($Backbuffer,1,1,200,200)
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    _GDIPlus_GraphicsDrawRect($Backbuffer,$dWidth,$dHeight,200,200)

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

    EndSwitch
    Sleep (1000)
    _ReDraw()
    _GDIPlus_GraphicsClear($Backbuffer, $GUI_Back_Color)
    WEnd
    Func _Exit()
    _GDIPlus_ShutDown()
    _GDIPlus_GraphicsDispose($Graphic)
    _GDIPlus_BitmapDispose($Bitmap)
    Exit
    EndFunc
    Func _ReDraw()
    $dWidth+=1
    $dHeight+=1
    _GDIPlus_GraphicsDrawRect($Backbuffer,$dWidth,$dHeight,200,200)
    EndFunc

    [/autoit]


    Hm...

    Er malt doch in den BackBuffer, was habe ich vergessen ?

    Es gibt sehr viele Leute, die glauben. Aber aus Aberglauben.
    - Blaise Pascal

  • Ich finde dein Skript ziemlich unübersichtlich, außerdem räumst du nicht alle Ressourcen auf...

    Hier ist ein Skript, das ich mal gemacht habe, im Grunde das, was du willst:

    Spoiler anzeigen
    [autoit]


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

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

    Global $GUIWidth = 500
    Global $GUIHeight = 500
    Global $iX = 50
    Global $iY = 50
    Global $StepX = 3
    Global $StepY = 4
    Global $Width = 10
    Global $Height = 10
    Global $Reibung = -1 ;veränder den Wert ein bischen, und schau was passiert

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

    $Gui = GUICreate("Bild", $GUIWidth, $GUIHeight)
    GUISetState()

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

    _GDIPlus_Startup()

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

    Global $GDIPlus_GUI = _GDIPlus_GraphicsCreateFromHWND($Gui)
    Global $Bitmap = _GDIPlus_BitmapCreateFromGraphics($GUIWidth, $GUIHeight, $GDIPlus_GUI)
    Global $Buffer = _GDIPlus_ImageGetGraphicsContext($Bitmap)
    _GDIPlus_GraphicsSetSmoothingMode($Buffer, 2)
    _GDIPlus_GraphicsClear($Buffer, 0xFF000000)
    Global $Pen = _GDIPlus_PenCreate(0xFFFFFFFF, 10, 0)
    _GDIPlus_GraphicsDrawArc($Buffer, $iX, $iY, $Width, $Height, 200, 400, $Pen)
    _GDIPlus_GraphicsDrawImageRect($GDIPlus_GUI, $Bitmap, 0, 0, $GUIWidth, $GUIHeight)

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

    AdlibRegister("_Draw", 16)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    _GDIPlus_BitmapDispose($Bitmap)
    _GDIPlus_GraphicsDispose($GDIPlus_GUI)
    _GDIPlus_GraphicsDispose($Buffer)
    _GDIPlus_PenDispose($Pen)
    _GDIPlus_Shutdown()
    Exit
    EndSwitch
    WEnd

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

    Func _Draw()
    _GDIPlus_GraphicsClear($Buffer)
    _GDIPlus_GraphicsDrawArc($Buffer, $iX, $iY, $Width, $Height, 200, 400, $Pen)
    _GDIPlus_GraphicsDrawImageRect($GDIPlus_GUI, $Bitmap, 0, 0, $GUIWidth, $GUIHeight)
    $iX -= $StepX
    $iY += $StepY
    If $iX >= $GUIWidth - $Width Then $StepX *= $Reibung
    If $iX <= 0 + $Height Then $StepX *= $Reibung
    If $iY >= $GUIHeight - $Height Then $StepY *= $Reibung
    If $iY <= 0 + $Height Then $StepY *= $Reibung
    If _IsPressed("08") Then _reset() ;mit BACKSPACE passiert etwas
    EndFunc ;==>_Draw

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

    Func _reset()
    Global $GUIWidth = 500
    Global $GUIHeight = 500
    Global $iX = 50
    Global $iY = 50
    Global $StepX = 5
    Global $StepY = 4
    Global $Width = 10
    Global $Height = 10
    Global $Reibung = -1
    EndFunc ;==>_reset

    [/autoit]
  • Ahh ja, nur schade das der lernfaktor dabei = 0 ist -.-
    In SEuBos Tut macht er doch eigentlich das gleiche ?

    Es gibt sehr viele Leute, die glauben. Aber aus Aberglauben.
    - Blaise Pascal

  • Falls du verzweifelst, hier ist die Lösung:
    (aber nur im Notfall schaun!)

    Spoiler anzeigen
    [autoit]


    #include <GDIPlus.au3>
    #include <GUIConstants.au3>

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

    Global $Width = 353
    Global $Height = 501
    Global $dHeight = 1
    Global $dWidth = 1
    Global $GUI_Back_Color = 0xFFFFFFFF

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

    _GDIPlus_Startup()

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

    #Region ### START Koda GUI section ### Form=
    Global $Form1 = GUICreate("Worms AutoIt", $Width, $Height, -1, -1)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    Global $Graphic = _GDIPlus_GraphicsCreateFromHWND($Form1)
    Global $Bitmap = _GDIPlus_BitmapCreateFromGraphics($Width, $Height, $Graphic)
    Global $Backbuffer = _GDIPlus_ImageGetGraphicsContext($Bitmap)

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

    _GDIPlus_GraphicsDrawRect($Backbuffer, 1, 1, 200, 200)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    _Exit()
    EndSwitch
    _ReDraw()
    _GDIPlus_GraphicsClear($Backbuffer, $GUI_Back_Color)
    WEnd

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

    Func _Exit()
    _GDIPlus_GraphicsDispose($Backbuffer)
    _GDIPlus_GraphicsDispose($Graphic)
    _GDIPlus_BitmapDispose($Bitmap)
    _GDIPlus_Shutdown()
    Exit
    EndFunc ;==>_Exit

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

    Func _ReDraw()
    $dWidth += 1
    $dHeight += 1
    _GDIPlus_GraphicsDrawRect($Backbuffer, $dWidth, $dHeight, 200, 200)
    _GDIPlus_GraphicsDrawImageRect($Graphic, $Bitmap, 0, 0, $Width, $Height)
    EndFunc ;==>_ReDraw

    [/autoit]
  • Ich würde das ja eher im OnEventMode schreiben, so ist zumindest die ReDraw Funktion nicht in der MessageLoop ;).
    Glaubst du nicht, dass du dich mit Worms ein wenig übernimmst? :rolleyes:
    Außerdem sehe ich in letzter Zeit viele GDI+ Scripte die meinen eigenartigerweise recht ähnlich sehen :D.

    Spoiler anzeigen
    [autoit]


    #include <GDIPlus.au3>
    #include <GUIConstants.au3>

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

    Opt("GUIOnEventMode", 1)

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

    Global $Width = 353
    Global $Height = 501
    Global $dHeight = 1
    Global $dWidth = 1
    Global $GUI_Back_Color = 0xFFFFFFFF

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

    _GDIPlus_Startup()

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

    Global $Form1 = GUICreate("Worms AutoIt", $Width, $Height, -1, -1)
    GUISetState()

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

    Global $Graphic = _GDIPlus_GraphicsCreateFromHWND($Form1)
    Global $Bitmap = _GDIPlus_BitmapCreateFromGraphics($Width, $Height, $Graphic)
    Global $Backbuffer = _GDIPlus_ImageGetGraphicsContext($Bitmap)

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

    _GDIPlus_GraphicsDrawRect($Backbuffer, 1, 1, 200, 200)

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

    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")

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

    While Sleep(20)
    $dWidth += 1
    $dHeight += 1
    _GDIPlus_GraphicsDrawRect($Backbuffer, $dWidth, $dHeight, 200, 200)
    _GDIPlus_GraphicsDrawImageRect($Graphic, $Bitmap, 0, 0, $Width, $Height)
    _GDIPlus_GraphicsClear($Backbuffer, $GUI_Back_Color)
    WEnd

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

    Func _Exit()
    _GDIPlus_GraphicsDispose($Backbuffer)
    _GDIPlus_GraphicsDispose($Graphic)
    _GDIPlus_BitmapDispose($Bitmap)
    _GDIPlus_Shutdown()
    Exit
    EndFunc ;==>_Exit

    [/autoit]
  • Außerdem sehe ich in letzter Zeit viele GDI+ Scripte die meinen eigenartigerweise recht ähnlich sehen :D

    Ist das auf mich bezogen?

  • Deswegen spreche ich mit unseren Chinesen englisch ;). Ich kann übrigens noch Shi (Ja) und Bu (Nein) :D .

    Aber Worms ist doch ein bisschen groß. Ich bin grad bei PacMan bei und da muss ich schon nen bisschen mehr nachdenken.

  • Ahh ja, nur schade das der lernfaktor dabei = 0 ist -.-

    Dann vergleiche die Scripte, und suche die unterschiede.

    Ist ja praktisch so als wenn du einem Chinesen das Bohr'sche Atommodell erklären willst, aber nur ni hao kannst...

    Gutes beispiel

    Deswegen spreche ich mit unseren Chinesen englisch

    Das wäre bei mir so ungefähr das gleiche, wie Chinesisch...

    @EM: Wenn man ein Haus baut, fängt man ja auch nciht mit dem Dach an. oder?

  • @EM: Wenn man ein Haus baut, fängt man ja auch nciht mit dem Dach an. oder?

    Bist du dir da sicher???


    Ne, mal ernsthaft, @EM: Pinguin94 hat schon Recht:

    Du willst GDI+ lernen, dann fang mit was leichterem an.

    Und das mein ich jetzt nicht so, das du gleich wieder fragen musst, ob das verboten ist!
    Probier doch einfach mal, verschiedene Formen in eine Grafik zu zeichnen, oder Bilder.
    Und lies immer in der Hilfe nach, ob du irgendwas "Disposen" musst!

    Wenn du das dann richtig verstanden hast, kannst du mit sich bewegenden Objekten anfangen, die zum Beispiel an der Wand abprallen...
    Sei kreativ, und lass dir Zeit, um das was du schreibst, auch zu verstehen.