Grafik Schneefall

  • Hallo leute,

    ich möchte einen Schneefall per Grafik schreiben, nicht per Pixel. Ich Zeig euch gleich mal den Code wie weit ich schon bin.

    bei diesem Code gibt es wohl einen Fehler ich weis nicht wo er liegt. Der Fehler zeigt sich so, die Grafiken werden gezeichnet Wunderbar, aber wenn ich diese Wie schneefall nach unten gleiten lasse, dann geht von den ganzen 50 grafiken nur 1 Grafik Kerzengerade nach unten aber nur zum Teil, danach stürzt das Script ab, jemand von euch eine Idee, wie ich diesen Fehler umgehe?

    Mein Code:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <GDIPlus.au3>

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

    Global $Count = 50
    Global $hGraphics
    Global $hImage
    Dim $aHandles[100][4]

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

    $hGUI = GUICreate("Grafik Schneefall", 615, 438, 196, 127)
    GUISetState(@SW_SHOW)

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

    _GDIPlus_Startup()

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

    ;Load Image
    $hImage = _GDIPlus_ImageLoadFromFile("soother.png")

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

    ;Zeige Grafik an
    $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI)

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

    For $i = 1 To $Count
    _Bilderstellen($i, Random(0, 615), Random(1, 50))
    If $i = $Count Then
    _Fall()
    EndIf
    Next

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    _GDIPlus_GraphicsDispose($hGraphics)
    _GDIPlus_ImageDispose($hImage)
    _GDIPlus_Shutdown()
    Exit

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

    EndSwitch

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

    WEnd

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

    Func _Bilderstellen($i, $x, $y)
    $aHandles[$i][1] = _GDIPlus_GraphicsDrawImageRect($hGraphics, $hImage, $x, $y, 40, 40)
    $aHandles[$i][2] = $x
    $aHandles[$i][3] = $y
    EndFunc ;==>_Bilderstellen

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

    Func _Fall()
    For $a = $aHandles[$i][3] To 615
    _GDIPlus_GraphicsDrawImageRect($hGraphics, $hImage, $aHandles[$a][2], $a, 40, 40)
    Sleep(100)
    Next
    EndFunc

    [/autoit]

    Wär super wenn ihr mir helfen könnt

    MfG, Facemix

    meine Spezialität: Windowstools für eine leichtere Arbeit am PC

    Nicht veröffentlicht


    nicht veröffentlichte Programme von mir

    - FTP Filereader
    - Youtube Kanal Player
    -GDI+ Countdown (bis zu einem Wunderbaren ereignis :) )

    MyPastebin

  • weil sobald die erste flocke erstellt ist.. wird sie 615 mal bewegt.. und auch nur die y koordinate ändert sich(bis sie bei 615 angekommen ist).. was erklärt warum sie kerzengrade fällt..

  • ok und der Fehler, dass das Programm nach ablauf der einen Flocke abstürzt? woran liegt das?
    und wie kann ich alle anderen Flocken mit nach unten steuern und nicht nur die eine?

    -Problem Fürs abstürzen gelöst, habe dazu die Func _Fall() geändert:

    [autoit]


    Func _Fall()
    For $a = $aHandles[$i][3] To 615
    $aHandles[$i][1] = _GDIPlus_GraphicsDrawImageRect($hGraphics, $hImage, $aHandles[$i][2], $a, 40, 40)
    Sleep(100)
    Next
    EndFunc

    [/autoit]

    doch leider noch immer das Problem, dass nicht alle Grafiken nach unten bewegt werden.

    MfG, Facemix

    meine Spezialität: Windowstools für eine leichtere Arbeit am PC

    Nicht veröffentlicht


    nicht veröffentlichte Programme von mir

    - FTP Filereader
    - Youtube Kanal Player
    -GDI+ Countdown (bis zu einem Wunderbaren ereignis :) )

    MyPastebin

    Einmal editiert, zuletzt von Facemix (29. November 2013 um 00:06)

  • Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <GDIPlus.au3>

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

    Global $Count = 50
    Global $hGraphics
    Global $hImage
    Dim $aHandles[100][4]

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

    $hGUI = GUICreate("Grafik Schneefall", 615, 438, 196, 127)
    GUISetState(@SW_SHOW)

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

    _GDIPlus_Startup()

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

    ;Load Image
    $hImage = _GDIPlus_ImageLoadFromFile("snow.png")

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

    ;Zeige Grafik an
    $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI)

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

    $hBitmap = _GDIPlus_BitmapCreateFromGraphics(615, 438, $hGraphics)
    $hBuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)
    ;first run
    For $i = 1 To $Count
    _Bilderstellen($i, Random(0, 615), Random(1, 437))
    Next
    ;

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

    While 1
    _GDIPlus_GraphicsClear($hBuffer)
    _GDIPlus_GraphicsClear($hBitmap)
    _GDIPlus_GraphicsDrawImageRect($hBitmap, $hBuffer, 0, 0,615,438)

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

    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    _GDIPlus_GraphicsDispose($hGraphics)
    _GDIPlus_ImageDispose($hImage)
    _GDIPlus_Shutdown()
    Exit

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

    EndSwitch
    Sleep(1)
    _Fall()

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

    _GDIPlus_GraphicsDrawImageRect($hGraphics, $hBitmap, 0, 0,615,438)

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

    WEnd

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

    Func _Bilderstellen($i, $x, $y)
    $aHandles[$i][1] = _GDIPlus_GraphicsDrawImageRect($hBuffer, $hImage, $x, $y, 40, 40)
    $aHandles[$i][2] = $x
    $aHandles[$i][3] = $y
    EndFunc ;==>_Bilderstellen

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

    Func _Fall()
    For $i = 1 To $Count
    For $a = $aHandles[$i][3] To 615
    _GDIPlus_GraphicsDrawImageRect($hBuffer, $hImage, $aHandles[$i][2], $a, 40, 40)
    $aHandles[$i][3] = $aHandles[$i][3]+1
    ExitLoop
    Next
    If $aHandles[$i][3] >= 438 Then _Bilderstellen($i, Random(0, 615), -40)
    Next
    EndFunc

    [/autoit]

    [Blockierte Grafik: http://www.cookie-technology.net/snow.png]

    //EDIT: hinweis.. direkt hierrüber ist eine schneeflockengrafik ;D

    //EDIT2: ehrlich gesagt hab ich wenn ich mir das so anschaue keine ahnung warum das funzt xD

    nicht drüber meckern wie schön es gemacht ist, ich bin müde, hungrig und durstig.. aber es funktioniert

    mfg
    sgtigram

  • Ja das Ist genau das was ich gesucht habe, und dass es nicht kerzengerade nach unten geht, werde ich selbst versuchen

    MfG, Facemix

    meine Spezialität: Windowstools für eine leichtere Arbeit am PC

    Nicht veröffentlicht


    nicht veröffentlichte Programme von mir

    - FTP Filereader
    - Youtube Kanal Player
    -GDI+ Countdown (bis zu einem Wunderbaren ereignis :) )

    MyPastebin

  • HIER ist auch etwas....