クリックのシミュレーションのためのPythonによるゲームランタイムスクリプト
この記事は、前回の記事に続くものです Pythonを使ってゲームランタイムスクリプトを開発する(I) Desertプラグインをうまく呼び出すために
前回の記事では、pythonを実装してDaimlerプラグインを呼び出し、バージョン番号を出力するだけでしたが、次にやりたいことは、Daimlerプラグインを通してマウスクリックやキーボードの文字入力をシミュレートすることです。近年の人気ゲームは基本的に携帯ゲーム機なので、ゲームスクリプト開発でも携帯ゲーム機を例に挙げて説明します。Desertプラグインは、Windowsプラットフォーム用のマウスキーボードシミュレーション+グラフィックファインダライブラリです。
このように、ハンディスクリプト開発を実現するための第一歩は、Androidエミュレータをダウンロードし、Androidエミュレータ上でマウスとキーボードをシミュレートしてゲームスクリプトを自動化することなのです。
I. Androidエミュレータの選択
- 夜神月エミュレータ、雷電エミュレータ、Tencent Handy Assistant、NetEaseのMumu Emulatorなど、現在多くのAndroidエミュレータが市場に出回っています。これらのエミュレータは、携帯ゲームとの相性や砂漠プラグインへの対応など、それぞれ一長一短がありますので、特定の携帯ゲームに応じて、ご自身の判断でご利用ください。
- ここでは夜神月エミュレータを選びましたが、原理は同じなので、他のものを選んでも確かに大丈夫です。エミュレータを選択後、ダウンロードとインストールを行い、無事に開くと、夜神月エミュレータのメインページが表示されますが、ここでは夜神月エミュレータの解像度を【640*360 / dpi = 240】に変更しました。
次に、desertプラグインを使用して、特定のウィンドウにバインドします。
Windows の場合、デスクトップ上に表示されるものはすべて実際には Windows のウィンドウが次々と表示されており、Android エミュレータも例外ではありません。Daimler API のドキュメントによると、マウスクリックやキーボードのキーストロークをシミュレートするには、まず Daimler プラグインの API を呼び出して特定のウィンドウをバインドしなければならず、それには Daimler API の一部が関わっています(特定の API に関しては Daimler Plugin の API ドキュメントを参照してください)。
import win32com.client
# Create a desert instance object
def createDMInstance():
dm = win32com.client.Dispatch('dm.dmsoft') # Call the DAM plugin, get the DAM object
print("DMSoft plugin version number: " + dm.ver()) # output version number
return dm
# Find the window, return the window handle found
def findWindow(dm, windowClass, windowTitle):
windowHandle = dm.FindWindow(windowClass, windowTitle)
print("Found window handle = " + str(windowHandle)) # output window handle ID
return windowHandle
# Bind a window
def bindWindow(dm, windowHandle):
isBindSuccess = dm.BindWindow(windowHandle, "normal", "normal", "normal", "normal", 0)
print("whether bindSuccess = " + str(isBindSuccess)) # whether bindSuccess
return isBindSuccess # whether the bind is successful
if __name__ == '__main__':
dm = createDMInstance()
windowHandle = findWindow(dm, "", "Night Simulator")
isBindSuccess = bindWindow(dm, windowHandle)
- DesertプラグインのAPI [FindWindow]を呼び出して、夜神月エミュレータのウィンドウハンドルを検索し、ウィンドウハンドルの番号を出力する
- API [BindWindow]を呼び出して、見つかったウィンドウハンドルをバインドし、バインド結果を出力する。
III. マウスシミュレーションの実行
ウィンドウのバインドに成功したら、そのウィンドウ、つまりナイトシミュレータで好きなことができるようになります!
ここでは、Daimler プラグインの API [MoveTo(x, y)] を呼び出して特定の座標点(全体の座標系は Android エミュレータの左上を原点として右下に展開しています)にマウスを移動させ、次に [LeftClick()] を呼び出し、クリックのシミュレーションに成功しています。
pythonが起動した瞬間に、マウスがx=136, y=161の位置に自ら移動し、アプリを開くクリックをトリガーしているので、最初のマウスシミュレーションクリックがあることがわかりますね。
Pythonを使ってクリックをシミュレートするゲームランタイムスクリプトを開発するお話は以上です。Pythonによるシミュレーションの詳細については、スクリプトハウスの過去記事を検索するか、以下の記事を引き続きご覧ください。
関連
-
[解決済み】Flaskのエラー。"メソッドが許可されていません 要求されたURLに対してメソッドが許可されていません"
-
[debug] ValueError: すべての入力配列は、同じ次元数で解決されなければなりません。
-
[解決済み] 'DataFrame' オブジェクトに 'sort' 属性がありません。
-
[解決済み] オフセットロールフォワードと月オフセット追加後のパンダの境界外ナノ秒のタイムスタンプ
-
[解決済み] Pythonで関数を前方に宣言することは可能ですか?
-
[解決済み] ユニットテストのassertRaises()をNoneTypeオブジェクトで適切に使用するには?[重複]する
-
[解決済み] スライスされたPythonのバイトコードを実行すると、"SystemError: unknown opcode "が発生することがある。
-
ターミナルでpipコマンドを使用するとプロンプトが表示されます。ランチャーで致命的なエラーが発生しました。Unable to create process using '"' と表示されます。
-
print を使用したエラー SyntaxError: print' の呼び出しに括弧がありません print("") のことですか?
-
pythonは、ValueError: 2 次元配列を期待したが、代わりに 1 次元配列が来た。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Python 3.5とAnacondaを使用してモジュールcPickleが見つかりません。
-
python TypeError: Unicode オブジェクトはハッシュ化する前にエンコードする必要がある 解決策
-
[解決済み] IPython, "名前 'plt' が定義されていません".
-
[解決済み] scipy.miscモジュールにimread属性がない?
-
[解決済み] Spyderのオブジェクトインスペクタがない
-
[解決済み] jinja2 テンプレートが見つからず、内部サーバーエラーが発生する。
-
[解決済み] env: python ✎: No such file or directory
-
[解決済み] Pythonのサブプロセスpopenの使い方 [重複]。
-
[解決済み] ImportError: redisという名前のモジュールがない
-
ModuleNotFoundErrorの解決策です。tensorflow.contrib'という名前のモジュールがありません。