【问题标题】:Macbook OpenEmu Python send keystrokesMacbook OpenEmu Python 发送击键
【发布时间】:2016-09-24 02:50:08
【问题描述】:

thisMarlIO 项目给我留下了深刻的印象,并希望使用 Python 实现类似的东西。但是,我得到了模拟器 OpenEmu 工作,但是,我不知道如何使用 Python 控制游戏。

不就是发送几个键的问题吗?!伙计,在 Mac 上并不是那么简单。

In [41]: cmd1
Out[41]: '\nosascript -e \'tell application "System Events" to key code 48 using {command down}\' \n'

In [42]: cmd2
Out[42]: '\nosascript -e \'tell application "System Events" to keystroke "a"\' \n'

我想先用COMMAND+TAB切换到openEmu,然后点击a跳转。但是,当我运行这两个命令时,它只切换到 OpenEmu,看起来击键 a 没有被发送。

但是,当我单独运行“cmd2”时,它显然可以正常工作。 然后我针对不同的应用程序进行了测试 - sublime,它似乎在那里工作。

谁能指出我在 OpenEmu 上真正做错的正确方向?

【问题讨论】:

  • 您是否成功将Python AI 插入OSX OpenEmu?如果是这样,请给我光明

标签: python macos emulation osascript


【解决方案1】:

几个月前我做过类似的事情。击键被发送。但是,系统事件击键几乎不会持续任何时间,因此模拟器的输入机制无法识别它们。

我找不到使用 AppleScript 询问持续时间的方法,所以我最终使用 Quartz event taps 解决了这个问题,例如,“开始按键,睡眠 0.1 秒,停止按键”。我是在 Swift 中完成的,但您应该可以在 Python 中使用 ctype 模块完成它。

另请注意,与模拟器进行逐帧同步可能很困难。我raised that problem with the project maintainers,但是因为回复比较冷,所以转身离开了。

【讨论】:

  • 您的自定义构建是否与 AppleScript 配合良好?你能发布一个有效的sn-p吗?
  • @Pwdr,我没有实现输入支持。如果你想要一个事件点击示例,我可能会想出一个。
  • 那太棒了!
  • @Pwdr,我没有代码了,但是this guy 有一个最小的示例,他发送一个键然后一个键向上。您需要在按键按下和按键按下之间插入延迟/睡眠,以确保模拟器的运行循环注意到按键已按下。取决于游戏本身,你会看到 20-300 毫秒; YMMV。请注意,击键始终适用于前台应用程序,因此您需要启动脚本,然后给自己一些时间将焦点设置回 OpenEmu。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-25
  • 2017-10-30
  • 2016-09-14
  • 1970-01-01
  • 1970-01-01
  • 2014-05-26
  • 2011-11-25
相关资源
最近更新 更多