GUI Mit Schwerkraft

  • Hallo,

    wie kann ich eine GUI auf dem Desktop fallen lassen, so das es auch echt aussieht. Also es fällt runter und springt auch danach noch ein wenig.

    so weit bin ich gekommen:

    [autoit]

    $2 = GUICreate("HAH", 200, 200, 500, 1)
    GUISetState()

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

    For $1 = 1 To 610
    WinMove($2, "", 500, $1)
    Sleep(10)
    Next

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

    For $1 = 610 To 500 Step -1
    WinMove($2, "", 500, $1)
    Sleep(10)
    Next

    [/autoit]
    • Offizieller Beitrag

    Probier mal das aus :

    Spoiler anzeigen
    [autoit]

    $2 = GUICreate("HAH", 200, 200, 500, 1)
    GUISetState()

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

    For $1 = 1 To 610
    WinMove($2, "", 500, $1)
    Sleep(10)
    Next
    For $j = 510 To 610 Step +10

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

    For $1 = 610 To $j Step -1
    WinMove($2, "", 500, $1)
    Sleep(10)
    Next

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

    For $1 = $j To 610
    WinMove($2, "", 500, $1)
    Sleep(10)
    Next
    Next

    [/autoit]


    Oder mit weniger gehoppel :

    Spoiler anzeigen
    [autoit]

    $2 = GUICreate("HAH", 200, 200, 500, 1)
    GUISetState()

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

    For $1 = 1 To 610
    WinMove($2, "", 500, $1)
    Sleep(10)
    Next
    For $j = 510 To 610 Step +20

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

    For $1 = 610 To $j Step -1
    WinMove($2, "", 500, $1)
    Sleep(10)
    Next

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

    For $1 = $j To 610
    WinMove($2, "", 500, $1)
    Sleep(10)
    Next
    Next

    [/autoit]
    • Offizieller Beitrag

    Dann mach es so in der Art:

    Spoiler anzeigen
    [autoit]

    $2 = GUICreate("HAH", 200, 200, 500, 1)
    GUISetState()

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

    For $1 = 1 To 610
    WinMove($2, "", 500, $1)
    Sleep(35-$1/16)
    Next
    For $j = 510 To 610 Step +20

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

    For $1 = 610 To $j Step -1
    WinMove($2, "", 500, $1)
    Sleep(10)
    Next

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

    For $1 = $j To 610
    WinMove($2, "", 500, $1)
    Sleep(10)
    Next
    Next

    [/autoit]

    Einfach mal ein Bischen mit dem Sleep rumbasteln.

    Edit:Shit, falschen Quelltext . Angepaßt.

    • Offizieller Beitrag

    GTA sieht gut aus.

    Edit : GTA´s Beispiel mit der Gui:

    Spoiler anzeigen
    [autoit]

    #include <WindowsConstants.au3>

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

    ; Bounce Test by Hallman

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

    ; Change these variables to whatever you want
    Global $Gravity = 1.4
    ; Has to be greater than 1 (1.4 = default)

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

    Global $Bounce_Ratio = 0.7 ;
    ; Should be >0 and <1 (0.7 = default). If you set it to 1, then the ball will bounce to the same height that it was dropped from.

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

    Global $TimePerTick = 30
    ; How long each tick is in miliseconds. Bigger number = slower ball movement (30 = default)

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

    ; -----------------------------------------------------------------------------------------------------------------------------------
    ; -----------------------------------------------------------------------------------------------------------------------------------

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

    Dim $BallPos[4]
    $BallPos[0] = 0
    $BallPos[1] = 0
    $BallPos[2] = 200
    $BallPos[3] = 200

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

    Dim $Current_Tick[6]
    ;~ $Current_Tick[0] = Active? (0 or 1)
    ;~ $Current_Tick[1] = Timer
    ;~ $Current_Tick[2] = Movement So Far
    ;~ $Current_Tick[3] = Total Movement

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

    Global $Speed = 0

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

    $Main_Window =GUICreate("HAH", 200, 200, 500, 1)

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

    GuiSetState()

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

    WinSetOnTop($Main_Window, "", 1)

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

    $Win_Pos = WinGetPos($Main_Window, "")

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

    $BallPos[0] = $Win_Pos[0]
    $BallPos[1] = $Win_Pos[1]

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

    Sleep(2000)

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

    $Loop_Timer = TimerInit()
    $Time_Per_Loop = 1

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

    $Speed = 1

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

    $Current_Tick[0] = 0

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

    While 1
    $Time_Per_Loop = TimerDiff($Loop_Timer)
    $Loop_Timer = TimerInit()

    If $Current_Tick[0] = 1 Then

    $Current_Tick_Time = TimerDiff($Current_Tick[1])

    If $Current_Tick_Time > $TimePerTick Then
    $BallPos[1] = $Current_Tick[3]
    WinMove($Main_Window, "", $BallPos[0], $BallPos[1], $BallPos[2], $BallPos[3])
    $Current_Tick[0] = 0
    Else
    If $Speed > 0 Then
    $int = ($TimePerTick - $Current_Tick_Time) / $Time_Per_Loop
    $Movement = ($Current_Tick[3] - $Current_Tick[2]) / $int

    $Current_Tick[2] += $Movement
    If $Current_Tick[2] >= $Current_Tick[3] Then
    $BallPos[1] = $Current_Tick[3]
    WinMove($Main_Window, "", $BallPos[0], $BallPos[1], $BallPos[2], $BallPos[3])
    $Current_Tick[0] = 0
    Else
    $BallPos[1] = $Current_Tick[2]
    WinMove($Main_Window, "", $BallPos[0], $BallPos[1], $BallPos[2], $BallPos[3])
    EndIf
    Else
    $int = ($TimePerTick - $Current_Tick_Time) / $Time_Per_Loop
    $Movement = ($Current_Tick[3] - $Current_Tick[2]) / $int

    $Current_Tick[2] += $Movement
    If $Current_Tick[2] <= $Current_Tick[3] Then
    $BallPos[1] = $Current_Tick[3]
    WinMove($Main_Window, "", $BallPos[0], $BallPos[1], $BallPos[2], $BallPos[3])
    $Current_Tick[0] = 0
    Else
    $BallPos[1] = $Current_Tick[2]
    WinMove($Main_Window, "", $BallPos[0], $BallPos[1], $BallPos[2], $BallPos[3])
    EndIf
    EndIf
    EndIf
    Else

    If $BallPos[1] = (@DesktopHeight - $BallPos[3]) Then
    $Speed = $Speed * -1
    $Speed = $Speed * $Bounce_Ratio
    If $Speed > -0.2 and $Speed < 0.2 Then
    Sleep(2000)
    Exit
    EndIf
    Else
    If $Speed > 0 Then
    $Speed = $Speed * $Gravity
    ElseIf $Speed < 0 Then
    $Speed = $Speed / $Gravity
    If $Speed > -2 Then $Speed = $Speed * -1
    EndIf
    EndIf

    $Current_Tick[2] = $BallPos[1]

    $Current_Tick[3] = $BallPos[1] + $Speed

    If $Current_Tick[3] > (@DesktopHeight - $BallPos[3]) Then
    $Current_Tick[3] = (@DesktopHeight - $BallPos[3])
    EndIf

    $Current_Tick[1] = TimerInit()

    $Current_Tick[0] = 1
    EndIf
    WEnd

    [/autoit]

    Und das is auch Nett:

    Spoiler anzeigen
    [autoit]

    #include <WindowsConstants.au3>

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

    ; Bounce Test by Hallman

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

    ; Change these variables to whatever you want
    Global $Gravity = 1.4
    ; Has to be greater than 1 (1.4 = default)

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

    Global $Bounce_Ratio = 0.7 ;
    ; Should be >0 and <1 (0.7 = default). If you set it to 1, then the ball will bounce to the same height that it was dropped from.

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

    Global $TimePerTick = 30
    ; How long each tick is in miliseconds. Bigger number = slower ball movement (30 = default)

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

    ; -----------------------------------------------------------------------------------------------------------------------------------
    ; -----------------------------------------------------------------------------------------------------------------------------------

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

    Dim $BallPos[4]
    $BallPos[0] = 30
    $BallPos[1] = 0
    $BallPos[2] = 200
    $BallPos[3] = 200

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

    Dim $Current_Tick[6]
    ;~ $Current_Tick[0] = Active? (0 or 1)
    ;~ $Current_Tick[1] = Timer
    ;~ $Current_Tick[2] = Movement So Far
    ;~ $Current_Tick[3] = Total Movement

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

    Global $Speed = 0

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

    $Main_Window = GUICreate("HAH", 200, 200, 1, 1)

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

    ;~ $Ball_Ctrl = GUICtrlCreatePic("accessories_guide_golfball.gif", 0, 0, $BallPos[2], $BallPos[3])

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

    GuiSetState()

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

    WinSetOnTop($Main_Window, "", 1)

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

    $Win_Pos = WinGetPos($Main_Window, "")

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

    $BallPos[0] = $Win_Pos[0]
    $BallPos[1] = $Win_Pos[1]

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

    Sleep(2000)

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

    $Loop_Timer = TimerInit()
    $Time_Per_Loop = 1

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

    $Speed = 1

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

    $Current_Tick[0] = 0

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

    While 1
    $Time_Per_Loop = TimerDiff($Loop_Timer)
    $Loop_Timer = TimerInit()
    $BallPos[0] += 1
    If $Current_Tick[0] = 1 Then

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

    $Current_Tick_Time = TimerDiff($Current_Tick[1])

    If $Current_Tick_Time > $TimePerTick Then
    $BallPos[1] = $Current_Tick[3]
    WinMove($Main_Window, "", $BallPos[0], $BallPos[1], $BallPos[2], $BallPos[3])
    $Current_Tick[0] = 0
    Else
    If $Speed > 0 Then
    $int = ($TimePerTick - $Current_Tick_Time) / $Time_Per_Loop
    $Movement = ($Current_Tick[3] - $Current_Tick[2]) / $int

    $Current_Tick[2] += $Movement
    If $Current_Tick[2] >= $Current_Tick[3] Then
    $BallPos[1] = $Current_Tick[3]
    WinMove($Main_Window, "", $BallPos[0], $BallPos[1], $BallPos[2], $BallPos[3])
    $Current_Tick[0] = 0
    Else
    $BallPos[1] = $Current_Tick[2]
    WinMove($Main_Window, "", $BallPos[0], $BallPos[1], $BallPos[2], $BallPos[3])
    EndIf
    Else
    $int = ($TimePerTick - $Current_Tick_Time) / $Time_Per_Loop
    $Movement = ($Current_Tick[3] - $Current_Tick[2]) / $int

    $Current_Tick[2] += $Movement
    If $Current_Tick[2] <= $Current_Tick[3] Then
    $BallPos[1] = $Current_Tick[3]
    WinMove($Main_Window, "", $BallPos[0], $BallPos[1], $BallPos[2], $BallPos[3])
    $Current_Tick[0] = 0
    Else
    $BallPos[1] = $Current_Tick[2]
    WinMove($Main_Window, "", $BallPos[0], $BallPos[1], $BallPos[2], $BallPos[3])
    EndIf
    EndIf
    EndIf
    Else

    If $BallPos[1] = (@DesktopHeight - $BallPos[3]) Then
    $Speed = $Speed * -1
    $Speed = $Speed * $Bounce_Ratio
    If $Speed > -0.2 and $Speed < 0.2 Then
    Sleep(2000)
    Exit
    EndIf
    Else
    If $Speed > 0 Then
    $Speed = $Speed * $Gravity
    ElseIf $Speed < 0 Then
    $Speed = $Speed / $Gravity
    If $Speed > -2 Then $Speed = $Speed * -1
    EndIf
    EndIf

    $Current_Tick[2] = $BallPos[1]

    $Current_Tick[3] = $BallPos[1] + $Speed

    If $Current_Tick[3] > (@DesktopHeight - $BallPos[3]) Then
    $Current_Tick[3] = (@DesktopHeight - $BallPos[3])
    EndIf

    $Current_Tick[1] = TimerInit()

    $Current_Tick[0] = 1
    EndIf
    sleep(1)
    WEnd

    [/autoit]
  • Ich hab mir mal erlaubt das in eine Funktion einzubauen (vielleicht brauchts ja Deepred)

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>

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

    $Main_Window = GUICreate("HAH", 200, 200, 1, 1)
    GuiSetState()
    _Gravity($Main_Window, @DesktopWidth / 2, @DesktopHeight / 2)

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

    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    Sleep(10)
    WEnd

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

    Func _Gravity($Main_Window, $EndPosX = 500, $EndPosY = 500, $Gravity = 1.4, $Bounce_Ratio = 0.7, $TimePerTick = 30)
    Dim $BallPos[4]
    $BallPos[0] = 30
    $BallPos[1] = 0
    $BallPos[2] = 200
    $BallPos[3] = 200

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

    Dim $Current_Tick[6]
    ;~ $Current_Tick[0] = Active? (0 or 1)
    ;~ $Current_Tick[1] = Timer
    ;~ $Current_Tick[2] = Movement So Far
    ;~ $Current_Tick[3] = Total Movement

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

    Global $Speed = 0

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

    WinSetOnTop($Main_Window, "", 1)

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

    $Win_Pos = WinGetPos($Main_Window, "")

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

    $BallPos[0] = $Win_Pos[0]
    $BallPos[1] = $Win_Pos[1]

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

    $Loop_Timer = TimerInit()
    $Time_Per_Loop = 1

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

    $Speed = 1

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

    $Current_Tick[0] = 0

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

    While 1
    $Time_Per_Loop = TimerDiff($Loop_Timer)
    $Loop_Timer = TimerInit()
    $BallPos[0] += 1
    If $Current_Tick[0] = 1 Then

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

    $Current_Tick_Time = TimerDiff($Current_Tick[1])

    If $Current_Tick_Time > $TimePerTick Then
    $BallPos[1] = $Current_Tick[3]
    WinMove($Main_Window, "", $BallPos[0], $BallPos[1], $BallPos[2], $BallPos[3])
    $Current_Tick[0] = 0
    Else
    If $Speed > 0 Then
    $int = ($TimePerTick - $Current_Tick_Time) / $Time_Per_Loop
    $Movement = ($Current_Tick[3] - $Current_Tick[2]) / $int

    $Current_Tick[2] += $Movement
    If $Current_Tick[2] >= $Current_Tick[3] Then
    $BallPos[1] = $Current_Tick[3]
    WinMove($Main_Window, "", $BallPos[0], $BallPos[1], $BallPos[2], $BallPos[3])
    $Current_Tick[0] = 0
    Else
    $BallPos[1] = $Current_Tick[2]
    WinMove($Main_Window, "", $BallPos[0], $BallPos[1], $BallPos[2], $BallPos[3])
    EndIf
    Else
    $int = ($TimePerTick - $Current_Tick_Time) / $Time_Per_Loop
    $Movement = ($Current_Tick[3] - $Current_Tick[2]) / $int

    $Current_Tick[2] += $Movement
    If $Current_Tick[2] <= $Current_Tick[3] Then
    $BallPos[1] = $Current_Tick[3]
    WinMove($Main_Window, "", $BallPos[0], $BallPos[1], $BallPos[2], $BallPos[3])
    $Current_Tick[0] = 0
    Else
    $BallPos[1] = $Current_Tick[2]
    WinMove($Main_Window, "", $BallPos[0], $BallPos[1], $BallPos[2], $BallPos[3])
    EndIf
    EndIf
    EndIf
    Else

    If $BallPos[1] = (@DesktopHeight - $BallPos[3]) Then
    $Speed = $Speed * -1
    $Speed = $Speed * $Bounce_Ratio
    If $Speed > -0.2 and $Speed < 0.2 Then
    ExitLoop
    EndIf
    Else
    If $Speed > 0 Then
    $Speed = $Speed * $Gravity
    ElseIf $Speed < 0 Then
    $Speed = $Speed / $Gravity
    If $Speed > -2 Then $Speed = $Speed * -1
    EndIf
    EndIf

    $Current_Tick[2] = $BallPos[1]

    $Current_Tick[3] = $BallPos[1] + $Speed

    If $Current_Tick[3] > (@DesktopHeight - $BallPos[3]) Then
    $Current_Tick[3] = (@DesktopHeight - $BallPos[3])
    EndIf

    $Current_Tick[1] = TimerInit()

    $Current_Tick[0] = 1
    EndIf
    sleep(1)
    WEnd
    WinMove($Main_Window, "", $EndPosX, $EndPosY)
    EndFunc

    [/autoit]

    Padmak