[Aus alten Zeiten] GDI+ through wall

  • Ein gutes GDI+ Bsp fand ich beim aufräumen meines Desktops, das hatte ich bereits (aber die "mit wand") bbm1995 gegeben.
    Es ist eigentlich recht cool, denn es klappt sogar :D

    Ich kann nicht beschreiben wie es geht, man läuft halt durch das eine Ende der Gui und kommt am anderen Ende wieder raus.

    Ihr denkt das ist nichts besonderes, ist es auch nicht, allerdings kann man sich sozusagen "Teilen"

    (ja es ist schwer zu beschreiben)

    Skript
    [autoit]


    #include <GDIPlus.au3>
    #include <Misc.au3>
    _GDIPlus_Startup()
    Global $Width = 200, $Height = 200, $X = 0, $Y = 0

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

    $GUI = GUICreate("Game", $Width, $Height)
    GUISetState(@SW_SHOW)

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

    $Graphic = _GDIPlus_GraphicsCreateFromHWND($GUI) ;Frontbuffer
    $Bitmap = _GDIPlus_BitmapCreateFromGraphics($Width, $Height, $Graphic) ;Bitmap für Frontbuffer
    $Backbuffer = _GDIPlus_ImageGetGraphicsContext($Bitmap) ;Backbuffer

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

    While 1
    Sleep(10)
    Switch GUIGetMsg()
    Case -3
    Exit
    EndSwitch
    _ReDraw()
    WEnd

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

    Func _ReDraw()
    _Bewegung()
    _GDIPlus_GraphicsClear($Backbuffer, 0xFFEFEBDE)

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

    _MinusX_Draw()
    _PlusX_Draw()
    _MinusY_Draw()
    _PlusY_Draw()
    _GDIPlus_GraphicsFillRect($Backbuffer, $X, $Y, 20, 20)

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

    _GDIPlus_GraphicsDrawImageRect($Graphic, $Bitmap, 0, 0, $Width, $Height)
    EndFunc ;==>_ReDraw
    Func _Bewegung()
    If _IsPressed("25") Then; Links
    If $X + 20 <= 0 Then
    $X = 200 - 20
    Else
    $X -= 2
    EndIf
    ElseIf _IsPressed("26") Then;Oben
    If $Y + 20 <= 0 Then
    $Y = 200 - 20
    Else
    $Y -= 2
    EndIf
    ElseIf _IsPressed("27") Then;Rechts
    If $X >= $Width Then
    $X = 0
    Else
    $X += 2
    EndIf
    ElseIf _IsPressed("28") Then;Unten
    If $Y >= $Height Then
    $Y = 0
    Else
    $Y += 2
    EndIf
    EndIf
    EndFunc ;==>_Bewegung
    Func _MinusX_Draw()
    Local $MinusX = 0 - $X
    If $MinusX >= 0 Then
    _GDIPlus_GraphicsFillRect($Backbuffer, $Width - $MinusX, $Y, 20, 20)
    EndIf
    EndFunc ;==>_MinusX_Draw
    Func _PlusX_Draw()
    Local $PlusX = $X - $Width
    If $PlusX <= 0 Then
    _GDIPlus_GraphicsFillRect($Backbuffer, 0 + $PlusX, $Y, 20, 20)
    EndIf
    EndFunc ;==>_PlusX_Draw
    Func _MinusY_Draw()
    Local $MinusY = 0 - $Y
    If $MinusY >= 0 Then
    _GDIPlus_GraphicsFillRect($Backbuffer, $X, $Height - $MinusY, 20, 20)
    EndIf
    EndFunc ;==>_MinusY_Draw
    Func _PlusY_Draw()
    Local $PlusY = $Y - $Height
    If $PlusY <= 0 Then
    _GDIPlus_GraphicsFillRect($Backbuffer, $X, 0 + $PlusY, 20, 20)
    EndIf
    EndFunc ;==>_PlusY_Draw

    [/autoit]

    PS: Wer mir sagen will, das Bild unten im Anhang ist ein Skriptfehler / Skriptschlampigkeit, der sagt schwachsinn, denn es spiegelt nur das original :)

    MfG EM

  • Nicht schlecht ! :thumpsup: Als Game würde ich es zwar nicht bezeichnen aber respekt

  • Nettes Skript. Der Effekt, dass ein Teil auf der anderen Seite "rausguckt" gefällt mir sehr.
    Als stand-alone Skript ist es zwar nicht sonderlich nützlich, jedoch kann es in Spielen gut gebraucht
    werden. Sozusagen eine "Wall-Engine" ;)
    MfG. PrideRage

    Meine Projekte:
    ClipBoard Manager (beendet)
    Gutes ClipBoard Verwaltungs Programm mit nützlichen Funktionen.

    HTML Creator (beendet)
    Nützliches Tool um schnell ein eigenes HTML Dokument zu erstellen.

  • So, da es euch "so gut gefällt" (oder auch nicht), mache ich jetzt eine UDF die dies für ein IMG unterstützt, wer was dagegen ?

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

  • nö, ich habe nix dagegen. nein, sogar die blödesten UDF's (die mindestens funktionieren) sollten hier im Forum sein!