Pfeiltastensteuerung; _IsPressed() + DLL

  • Hey,

    ich will ein Spiel machen, in dem man mit den Pfeiltasten steuert (und eventuell mit anderen Keys noch irgendetwas machen kann, Inventar aufrufen oder so).

    Da ist mir als erstes _IsPressed() in den Sinn gekommen. Ich wuerde das dann in etwa so machen:

    [autoit]

    #include <GUIConstantsEx.au3>
    #Include <Misc.au3>

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

    GUICreate("neu", 200, 200)
    GuiSetState()

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

    While 1
    $msg = GUIGetMsg()

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

    Select
    Case $msg = $GUI_EVENT_CLOSE
    Exit
    EndSelect

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

    If _IsPressed(26) Then
    MsgBox(0, "", "up", 2) ; msg box nur zum Testen
    ElseIf _IsPressed(28) Then
    MsgBox(0, "", "down", 2)
    ; und so weiter
    Else
    EndIf

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

    WEnd

    [/autoit]

    In der Hilfe steht, es sei besser die user32.dll zu benutzen, wenn _IsPressed() haeufiger verwendet wird, was ja bei mir der Fall ist.

    Beispiel aus der Hilfe:

    [autoit]

    #include <Misc.au3>

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

    $dll = DllOpen("user32.dll")

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

    While 1
    Sleep ( 250 )
    If _IsPressed("23", $dll) Then
    MsgBox(0,"_IsPressed", "End Key Pressed")
    ExitLoop
    EndIf
    WEnd
    DllClose($dll)

    [/autoit]

    Nun meine Fragen:

    - Soll ich mit der DLL arbeiten wie in der Hilfe empfohlen?
    - Wieso ist in dem Beispiel-Code ein 250 ms Sleep? Wenn ich das einbaue, funktioniert mein Skript nicht aka stuerzt ab.
    - Was haltet ihr von meiner Umsetzungsidee in Code #1? Sollte ich daran was aendern? Gibt es vielleicht eine bessere oder Performance-schonendere Methode? Wenn ich schon dabei bin, ist meine Umsetzung okay in Sachen Performance?

    Danke!

    Einmal editiert, zuletzt von pete_gzome (21. September 2011 um 17:43)

  • Hallo pete_gzome,

    der sleep() im Beispiel ist dafür das der zuständige Prozessorkern nicht zu 100% ausgelastet wird. Das dein Skript deswegen abstürzt kann ich mir zwar nicht vorstellen, aber da du eine Gui hast und GuiGetmsg benutzt kannst du darauf verzichten denn

    Zitat

    Bemerkungen (zu GuiGetmsg

    Diese Funktion gibt die CPU automatisch wieder frei, wenn es erforderlich ist, so dass sie ruhig in Dauerschleifen benutzt werden kann, ohne die CPU vollständig auszulasten.

    Quelle: dt. Hilfe

    mfg autoBert

  • Achso, das wusste ich nicht.

    Ist ja super, werde es dann wohl so machen wir im ersten Code und dazu die DLL benutzen.

    Danke euch!