Flashgame bedienen.. verbesserung der Vorgehensweise

  • Seid mir gegrüßt,

    ich beschäftige mich erst seit kurzem mit AutoIt, deshalb wollte ich mir ein paar Verbesserungsvorschläge zu meinem Vorhaben geben lassen.

    Erstmal der grobe Sachverhalt:

    geplant ist, dass ich bei dem evtl. bekannten Flashgame Yetisports 5 die sich bewegenden Bedienungsmöglichkeiten durch Zahleneingaben ersetzen will. Konkret also bei dem sich hin und her bewegenden Pfeil eine Grad Angabe und bei dem sich hin und her bewegendem Balken eine Prozentangabe.

    Bis dato sieht mein Vorgehen wie folgt aus:

    Ich lasse das Spiel von AutoIt starten, warte kurz, bis es geladen wurde, und lasse den Bildschirm nach einer bestimmten Farbe des start Buttons absuchen, und diesen danach ein paar mal drücken, um in das endgültige Spiel zu gelangen. Das funktioniert soweit auch einwandfrei.

    Als Code sieht das jetzt konkret so aus:

    Spoiler anzeigen
    [autoit]

    Run("C:\Dokumente und Einstellungen\Niels Janson\Desktop\yetisports5.exe")
    ;Yetisports starten hehehe

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

    Sleep(750) ;warten, bis Game geladen ist

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

    $coord = PixelSearch( 0, 0, 1024, 768, 0x4F71A2 )

    If @error == 1 Then ;Error Anzeigen, wenn Pixel nicht gefunden

    MsgBox(0,"Error", "Pixel nicht gefunden") ;Error anzeigen

    Else ;Wenn Pixel gefunden wurde

    _ins_Game_kommen()

    ;warten bis die Scala kommt:

    Sleep(4530)

    MouseClick ( "left") ;bestimmten Winkel auswählen

    Sleep(700)

    MouseClick ( "left") ;bestimmte Kraft auswählen

    EndIf

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

    Func _ins_Game_Kommen()

    MouseMove($coord[0],$coord[1]) ;Maus auf diese Stelle bewegen

    MouseClick ( "left") ;und auf den Button drücken

    Sleep(50)

    MouseClick ("left") ;How to Play wegdrücken

    Sleep(50)

    MouseClick ("left") ;Werbung wegdrücken

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

    Sleep(50)

    MouseClick ("left") ;Map wegdrücken

    EndFunc

    [/autoit]

    Nun war meine erste Überlegung, die Einstellmöglichkeiten besser zu kontrollieren über das Timing, d.h., dass ich nach dem Start des Spiels eine bestimme Zeit warte, bis ich einen Mausklick simulieren lasse, der Gedanke war, dass dieser Mausklick ja immer zum gleichen Zeitpunkt eingeleiten werden müsste, womit ich reproduzierbare Ergebnisse zur Erkenntnisgewinnung erhalten wollte. Leider hat das nicht so geklappt, wie ich das wollte, denn anscheinend entstehen gewisse Zeitunterschiede im Ablauf, woraufhin nie so genau geklickt wurde, wie ich mir das Erhofft hatte.

    Meine nächste Überlegung ist es jetzt, die beiden Bereiche, in denen die Einstellmöglichkeiten sich bewegen nach Pixeln des Pfeiles abzusuchen lassen, und beim Fund an der richtigen Stelle Klicken zu lassen.

    Doch komme ich nun endlich zu meinen Fragen:

    Erste Frage: wie kann ich ermittel lassen, wo mein Fenster auf dem Desktop liegt? Denn wenn ich das weiß, kann ich die Fläche, in der ich Pixel suchen lassen will enorm verkleinern, wodurch alles schneller läuft.

    Zweite Frage: Ist dieses Vorgehen überhaupt sinnvoll, oder gibt es bessere Varianten Flash Basierendes zu kontrollieren? Wenn ich schlichtweg dem Game direkt Daten schicken könnte, wäre alles ja viel einfacht.

    Dritte Frage: Woher könnten die Timing Unterschiede bei meiner ersten Methode kommen? habe vielleicht ich einen Fehler gemacht, der sich beheban ließe?

    Für Vorschläge wäre ich sehr Dankbar

    Grüße

    Letalisdei

  • Zitat

    Erste Frage: wie kann ich ermittel lassen, wo mein Fenster auf dem Desktop liegt? Denn wenn ich das weiß, kann ich die Fläche, in der ich Pixel suchen lassen will enorm verkleinern, wodurch alles schneller läuft.

    Das ist nur ein kleines Fenster oder?Dann kannst du mal Winmove benutzen damit schiebt er dein Fenster immer genau dahin wo du es haben willst.

    2 Mal editiert, zuletzt von Greek (14. August 2008 um 11:50)