Spiele-Problem

  • Hallo Leute :rolleyes: Ich hab mal wieder ein Problem xD :
    Ich baue mir zur Zeit ein Spiel und in der while schleife lasse ich per If _IsPressed mein Männchen laufen.Wenn man die Maus bewegt ist ja alles normal aber sobald man gleichzeitig die Maus bewegt geht der Horror los der Charakter wird doppelt wenn nicht dreifach so schnell :(
    An was liegt das ? Hoffe mir kann jemand helfn :thumbup:

    Skriptaussschnitt :

    Spoiler anzeigen
    [autoit]

    If _IsPressed("57",$dll) Then
    If $CharPosY > 3 Then
    $Touch1 = False
    If $Touch1 = False Then
    GUICtrlSetPos($CharIn , $CharPosX , $CharPosY -3)
    GUICtrlSetImage($CharIn,$Char4)
    $CharPosX = $CharPosX
    $CharPosY = $CharPosY - 3
    EndIf
    If _IsPressed("53",$dll) Then
    If $CharPosY < 800-46 Then
    $Touch2 = False
    If $Touch2 = False Then
    GUICtrlSetPos($CharIn , $CharPosX , $CharPosY +3)
    GUICtrlSetImage($CharIn,$Char2)
    $CharPosX = $CharPosX
    $CharPosY = $CharPosY + 3
    EndIf
    If _IsPressed("44",$dll) Then
    If $CharPosX < 1040-48 Then
    $Touch3 = False
    If $Touch3 = False Then
    GUICtrlSetPos($CharIn , $CharPosX + 3 , $CharPosY)
    GUICtrlSetImage($CharIn,$Char)
    $CharPosX = $CharPosX + 3
    $CharPosY = $CharPosY
    EndIf
    EndIf
    EndIf
    If _IsPressed("41",$dll) Then
    If $CharPosX > 3 Then
    $Touch4 = False
    If $Touch4 = False Then
    GUICtrlSetPos($CharIn , $CharPosX - 3 , $CharPosY)
    GUICtrlSetImage($CharIn,$Char3)
    $CharPosX = $CharPosX - 3
    $CharPosY = $CharPosY
    EndIf
    EndIf
    EndIf

    [/autoit]


    Hoffe ihr blickt durch :D :rolleyes:

    Einmal editiert, zuletzt von nof@ker2 (8. Mai 2009 um 17:16)

    • Offizieller Beitrag

    Das Problem liegt vermutlich darin, dass Du den MessageLoop-Modus verwendest.
    In einer MessageLoop-Schleife soll ja die Prozessorauslastung möglichst nicht auf 100% ansteigen, während eigentlich nur auf ein Event gewartet wird und demzufolge passt GUIGetMsg den "internen Sleep" dynamisch an.
    Man kann das an diesem Beispiel ganz gut erkennen:

    Spoiler anzeigen
    [autoit]


    GUICreate('test', 200, 100)
    $hLabel = GUICtrlCreateLabel('0', 20, 30, 100, 20)
    GUISetState()
    $iCount = 0
    Do
    $iCount += 1
    GUICtrlSetData($hLabel, $iCount)
    Until GUIGetMsg() = -3

    [/autoit]


    Sobald die Maus bewegt wird, zählt die Schleife viel schneller. Hält man die Maus an, wird es wieder langsamer.
    Wenn dieses Verhalten in einem Programm störend ist, dann muss man das Script auf den OnEvent-Modus umschreiben. Dort kann man den Sleep-Wert in der Endlosschleife selbst festlegen.

  • Das wird schwierig weil ich hab noch AdLibEnable drin usw :( Gibts da keine andere Lösung ??


    Edit : Oder wie kann ich mit

    [autoit]

    GuiCtrlSetOnEvent

    [/autoit]


    Sachen auf Tasten legen ??

    Edit2 : Hat sich erledigt klappt nun Danke Oscar !!! :)

    2 Mal editiert, zuletzt von nof@ker2 (8. Mai 2009 um 17:15)