GDI+ was ist das?

  • Hey
    Ich habe mir ein paar der treads angeguckt und bin öffters auf sogenannte GDI+ scripts gestoßen und hab gemerkt das es was mit bilder zu tun hat und sachen die sich bewegen etc.

    könnte mir jemand das pls erklären?
    schonmal danke im vorraus

  • okay danke für den link ich versteh da zwar ... nicht sehr viel aber das wird schon danke :)

  • ich weiss nicht wie aber.. irgenwie hab ichs verstanden!!! Und wo wir gerade dabei sind, also das is der script (besteht zu 99.99% aus dem aus dem tutoriel nur die bilder sind von mir xD), und wie könnt man das machen z.b. wie bei pacman das man nur bestimte stellen erreischen kann?

    z.B. in einem labyrinth ud das da noch andere figuren rumrennen? Bitte um schnelle antworten und sag schonmal danke^^

    [autoit]

    #include <GuiConstants.au3>
    #include <GdiPlus.au3>;das include
    #include <Misc.au3>

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

    OnAutoItExitRegister("_end") ; die Funktion _end am Ende des Scriptes ausführen

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

    $x = 0;x und y deklarieren
    $y = 0

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

    $Gui = GUICreate("Beispiel", 179, 163, 100,100)
    GUISetState(@SW_SHOW)

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

    _GDIPlus_Startup() ;Gdi starten

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

    $figur = _GDIPlus_ImageLoadFromFile(@DesktopDir & "\figur.png")
    $bk = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\hintergrund.gif")
    $height = _GDIPlus_ImageGetHeight($figur)
    $width = _GDIPlus_ImageGetWidth($figur)
    $verhaelnis = $height / $width
    $graphic = _GDIPlus_GraphicsCreateFromHWND($Gui)
    $bitmap = _GDIPlus_BitmapCreateFromGraphics(179, 163, $graphic)
    $buffer = _GDIPlus_ImageGetGraphicsContext($bitmap)

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

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    Select
    Case _IsPressed(25) and not $x <= 0; ------------- geändert -------------
    $x -= 3
    Case _IsPressed(26) and not $y <= 0; ------------- geändert -------------
    $y -= 3
    Case _IsPressed(27) and $x <= 160; ------------- geändert -------------
    $x += 3
    Case _IsPressed(28) and $y <= 125; ------------- geändert -------------
    $y += 3
    EndSelect

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

    _GDIPlus_GraphicsDrawImageRect($buffer,$bk,0,0,179, 163)
    _GDIPlus_GraphicsDrawImageRect($buffer,$figur,$x,$y,10, 10 * $verhaelnis)
    _GDIPlus_GraphicsDrawImage($graphic, $bitmap, 0, 0)
    Sleep(30)

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

    WEnd

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

    Func _end();die Exit funktion
    _GDIPlus_GraphicsDispose($graphic);Grafik Objekt freigeben
    _GDIPlus_GraphicsDispose($buffer)
    _GDIPlus_BitmapDispose($bitmap)
    _GDIPlus_ImageDispose($figur);Bild Objekt 1 freigeben
    _GDIPlus_ImageDispose($bk);Bild Objekt 2 freigeben
    _GDIPlus_Shutdown();Ressourcen freigeben
    EndFunc

    [/autoit]
  • Was meinst du genau mit bestimmte stellen?
    :)
    Du könntest dir evtl noch Bilder für Wände suchen diese dann ins script einfügen und dann mit Kollisionen arbeiten aber ich weis nicht wenn das dein
    erstes GDI+ script ist dann les dich lieber noch etwas ein ;)

    MfG Hellboy

    MfG hellboy

    [autoit]

    Do
    _help($user)
    Until $questions = 0

    [/autoit]

    Meine Werke:
    Ste`s Web-Radio

  • Ich ... habs mir anders überlegt xD
    boa soviel arbeit :O
    respekt^^ danke für den link schnitzel

  • hellboy wie könnte man das denn machen das man mit der "figur" die wände nicht berühren kann?
    dann muss man doch so schreiben das er an bestimmte stellen nicht hin kommt oder?

    wie geht das in "einfacher" verion?

  • Also ich hab ein wenig rumexperimentiert und hab das jetzt so eingestellt das man wieder bei 0,0 anfängt wenn man den schwarzen balken berührt (hab ich mit pixelsearch gemacht)
    aber das geht nur wenn der gui nicht verschoben wird weil die kordinaten vom gesammten desktop sind und nicht nur im gui wie find ich die herraus und wie kann ich einstellen dasd Pixelsearch nach den koordinaten (x, y) im gui guckt???
    also Hier ist das was ich bisjetzt gemacht hab :

    Spoiler anzeigen
    [autoit]


    #include <GuiConstants.au3>
    #include <GdiPlus.au3>;das include
    #include <Misc.au3>
    MsgBox (0, "Aufgabe", "Komme zum Ziel ohne die schwarzen Balken zu berühren!!!")

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

    OnAutoItExitRegister("_end") ; die Funktion _end am Ende des Scriptes ausführen

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

    $x = 0;x und y deklarieren
    $y = 0

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

    $Gui = GUICreate("Beispiel", 179, 163, 100,100)
    GUISetState(@SW_SHOW)

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

    _GDIPlus_Startup() ;Gdi starten

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

    $figur = _GDIPlus_ImageLoadFromFile(@DesktopDir & "\figur.gif")
    $bk = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\weiss.jpg")
    $balken = _GDIPlus_ImageLoadFromFile (@ScriptDir & "\balken.gif")
    $height = _GDIPlus_ImageGetHeight($figur)
    $width = _GDIPlus_ImageGetWidth($figur)
    $verhaelnis = $height / $width
    $graphic = _GDIPlus_GraphicsCreateFromHWND($Gui)
    $bitmap = _GDIPlus_BitmapCreateFromGraphics(179, 163, $graphic)
    $buffer = _GDIPlus_ImageGetGraphicsContext($bitmap)
    $buffer1 = _GDIPlus_ImageGetGraphicsContext($bitmap)

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

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    Select
    Case _IsPressed(25) and not $x <= 0 ; nach links
    $x -= 3
    Case _IsPressed(26) and not $y <= 0; nach oben
    $y -= 3
    Case _IsPressed(27) and $x <= 160 ; nach rechts
    $x += 3
    Case _IsPressed(28) and $y <= 135 ; nach unten
    $y += 3
    EndSelect

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

    _GDIPlus_GraphicsDrawImageRect($buffer,$bk,0,0,179, 163)
    _GDIPlus_GraphicsDrawImageRect($buffer1,$balken,25, 30, 100, 10)
    _GDIPlus_GraphicsDrawImageRect($buffer,$figur,$x,$y,25, 25 * $verhaelnis)
    _GDIPlus_GraphicsDrawImage($graphic, $bitmap, 0, 0)
    Sleep(30)

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

    $variable = Pixelsearch (128, 160, 227, 161, 0xFFFFFF)
    If IsArray ($variable)= True Then
    $x = 0
    $y = 0

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

    EndIf
    WEnd

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

    Func _end ();die Exit funktion
    _GDIPlus_GraphicsDispose($graphic);Grafik Objekt freigeben
    _GDIPlus_GraphicsDispose($buffer)
    _GDIPlus_BitmapDispose($bitmap)
    _GDIPlus_ImageDispose ($balken)
    _GDIPlus_ImageDispose($figur);Bild Objekt 1 freigeben
    _GDIPlus_ImageDispose($bk);Bild Objekt 2 freigeben
    _GDIPlus_Shutdown();Ressourcen freigeben
    EndFunc

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


    Edit Oscar: Bitte Doppelposts vermeiden (Bearbeiten-Button verwenden)! Spoiler hinzugefügt!

  • So :

    Spoiler anzeigen
    [autoit]


    #include <GuiConstants.au3>
    #include <GdiPlus.au3>;das include
    #include <Misc.au3>
    MsgBox (0, "Aufgabe", "Komme zum Ziel ohne die schwarzen Balken zu berühren!!!")

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

    OnAutoItExitRegister("_end") ; die Funktion _end am Ende des Scriptes ausführen

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

    $x = 0;x und y deklarieren
    $y = 0

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

    $Gui = GUICreate("Beispiel", 179, 163, 100,100)
    GUISetState(@SW_SHOW)

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

    _GDIPlus_Startup() ;Gdi starten

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

    $figur = _GDIPlus_ImageLoadFromFile(@DesktopDir & "\figur.gif")
    $bk = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\weiss.jpg")
    $balken = _GDIPlus_ImageLoadFromFile (@ScriptDir & "\balken.gif")
    $ziel = _GDIPlus_ImageLoadFromFile (@ScriptDir & "\ZIEL.gif")
    $height = _GDIPlus_ImageGetHeight($figur)
    $width = _GDIPlus_ImageGetWidth($figur)
    $verhaelnis = $height / $width
    $graphic = _GDIPlus_GraphicsCreateFromHWND($Gui)
    $bitmap = _GDIPlus_BitmapCreateFromGraphics(179, 163, $graphic)
    $buffer = _GDIPlus_ImageGetGraphicsContext($bitmap)
    $buffer1 = _GDIPlus_ImageGetGraphicsContext($bitmap)

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

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    Select
    Case _IsPressed(25) and not $x <= 0 ; nach links
    $x -= 3
    Case _IsPressed(26) and not $y <= 0; nach oben
    $y -= 3
    Case _IsPressed(27) and $x <= 160 ; nach rechts
    $x += 3
    Case _IsPressed(28) and $y <= 135 ; nach unten
    $y += 3
    EndSelect

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

    _GDIPlus_GraphicsDrawImageRect($buffer,$bk,0,0,179, 163)
    _GDIPlus_GraphicsDrawImageRect($buffer1,$balken,25, 30, 100, 10)
    _GDIPlus_GraphicsDrawImageRect ($buffer1, $ziel, 160, 135, 20,20 )
    _GDIPlus_GraphicsDrawImageRect($buffer,$figur,$x,$y,25, 25 * $verhaelnis)
    _GDIPlus_GraphicsDrawImage($graphic, $bitmap, 0, 0)
    Sleep(30)

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

    $variable = Pixelsearch (128, 160, 227, 161, 0xFFFFFF)
    If IsArray ($variable)= True Then
    $x = 0
    $y = 0
    EndIf
    $variable1 = PixelSearch (263, 261, 281, 279, 0xFFFFFF)
    If IsArray ($variable1) = True Then
    MsgBox (0,"Win","Du hast es geschafft")
    Exit
    EndIf

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

    WEnd

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

    Func _end ();die Exit funktion
    _GDIPlus_GraphicsDispose($graphic);Grafik Objekt freigeben
    _GDIPlus_GraphicsDispose($buffer)
    _GDIPlus_BitmapDispose($bitmap)
    _GDIPlus_ImageDispose ($balken)
    _GDIPlus_ImageDispose($figur);Bild Objekt 1 freigeben
    _GDIPlus_ImageDispose($bk);Bild Objekt 2 freigeben
    _GDIPlus_Shutdown();Ressourcen freigeben
    EndFunc

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


    Bitte um schnelle lösung weil es soll nicht nur auf meinem Pc spielbar sein.

    Edit Oscar: Bitte Doppelposts vermeiden (Bearbeiten-Button verwenden)! Spoiler hinzugefügt!

  • ich weiss... aber wie kann ichs sonst machen ohne so lange komplizierte sachen zu schreiben?

  • Dazu gibt es im Tutorial ganz am Ende des Spiele Parts ein Beispiel.
    Wenn dus nicht verstehst nochmal fragen.

    mfg Ubuntu

  • Zitat

    ich weiss... aber wie kann ichs sonst machen ohne so lange komplizierte sachen zu schreiben?


    Du kannst die Koordinaten überprüfen ;). Oder die Region Methode verwenden, aber das verstehst du ja nicht.
    Ist das nicht in Ubuntus Tutorial beschrieben? ?(