前言

最近在玩游戏光明旅者(Hyper Light Drifter),真的很好玩,强烈推荐。

其中的冲刺有一定的冷却CD,但是抓住时机以一定频率冲刺就可以破除CD不停地冲刺,我尝试了一下连续冲刺十五次是没有问题的,但是冲刺挑战成就竟然需要连续冲刺800下!

于是就有了这篇说明使用python成就的方法的文章。

如果不想看探索历程的,可以直接跳转到文章的解决方案。

探索历程

首先冲刺挑战的判定仅仅是连续冲刺,并不需要绕圈。

所以要想利用python冲刺的话,改为键鼠操作,然后把鼠标放在固定位置,控制键盘以一定频率按动,让人物不停来回横跳就行了。

我打算先实现用python操控游戏,然后再调试频率。

试验开始。

寻找键鼠操纵库

pykeyboard

在网上寻求答案的时候,我找到的第一个库是pykeyboard,当时我二话不说就用了起来。

from pykeyboard import PyKeyboard
from time import sleepk = PyKeyboard()while True:k.press_key(k.space_key)sleep(0.2)

然后确实在vscode运行程序之后,光标处不停地输入着空格。

大喜过望的我把光明旅者游戏界面打开,然而并没有预想中的效果。

主人公还是一动不动地站在原地,而当我按下空格的时候才会冲刺。

第一次尝试失败。而且我还不知道失败的原因。

pyautogui

我认为可能是库的原因,所以又换了一个库。这次是热门的pyautogui。

import time
import pyautogui                  while True:pyautogui.press('space')                                            time.sleep(0.2)

然而不知道为什么还是不行。

郁闷中我又去网上查找答案,我先是觉得是光标的问题,如果把光标移动进入游戏界面,就可以顺利操控游戏。但是我并没有找到相关的内容。

然后我又把键位调成了鼠标右键冲刺,原本按空格的代码改成了

pyautogui.rightClick()

但还是不行。

我十分地迷茫。程序根本没有在游戏中进行操作,任何的实际键鼠操作都可以顺利地在游戏中响应。

甚至没有被程序影响。

这时候我忽然明白如果程序确实没有干涉到游戏读入键鼠的操作,因为如果它们读入的是同一个键鼠的话,那么在程序运行的时候是不可能用实际的键鼠流畅操作游戏的,而是会被程序所影响变得迟钝。

python也许只是在模拟键鼠的输入,而不是真正的键鼠操作。

这时候我醒悟了。在网上冲浪一番后找到了这个说明

https://www.zhihu.com/question/68458175

在进入游戏后鼠标模式就会从 raw input 切换为 direct input 模式,所以这时候你即使用python改了你本机的鼠标坐标,也移动不了游戏视角的。
这个模式应该是DirectX那家公司创的,就是众所周知的DX9,DX11。而这些都是基于C语言和Windows环境。所以目前只知道能在windows中实现调用 direct mouse input,而 linux / mac 目前还未知。所以开发游戏脚本/强化学习算法,最好还是在windows上做。
调用方法就是楼下提到的 win32api 库,或者下文中的 ctypes 库,再或者是专门为控制游戏视角而开发的python库 pydirectinput 都可以,后两者本质也是调用 win32api。

pydirectinput

然后我立刻去试了这个库。

import time
import pydirectinputwhile True:                                       pydirectinput.press('SPACE')                                                     time.sleep(0.2)

确实可以了。

下面就是设定冲刺频率了。

冲刺频率

sleep尝试

首先我使用sleep函数。

但是很快就发现不太对劲,不管我调休眠多少时间都太慢了。

time观察

然后我用time察看了程序运行时间。

import time
import pydirectinputwhile True:  t0=time.time()pydirectinput.press('SPACE')print(time.time()-t0)


结果是0.32秒左右按键一次。

然后我测试了在游戏中达到连续冲刺实际需要的按键间隔。

这里使用了keyboard.hook来监听键盘事件。

import keyboard
import timekeyboard.hook(lambda e: print(e, time.time()))


可以看到按下space的间隔大约是0.22秒左右。

这就很尴尬了。需要的时间间隔比程序可以做到的最少时间间隔整整多了0.1秒。

起初我以为是电脑配置的问题,程序运行得不够快。

但是后来我发现,pydirectinput库的函数是自带暂停休眠的!

https://www.likecs.com/ask-672805.html

还多亏了上面这位。

pause解决

然后我多加了一句代码。

import time
import pydirectinputwhile True:  t0=time.time()pydirectinput.press('SPACE')pydirectinput.PAUSE=0.03print(time.time()-t0)

输出是这个样子:

由于太快了所以把pause时间改成0.14秒,这样正好就是0.22秒。

但是我进入游戏界面还是一抖一抖冲刺很慢。

然后我试着改成了0.08秒,结果非常成功。

可能是玩游戏的时候占用了CPU,程序在后台运行会变慢吧。

以下是最终解决方案。

解决方案

import keyboard
import time
import pydirectinputwhile True:  pydirectinput.press('SPACE')pydirectinput.PAUSE=0.08#可能每个人电脑配置不一样,不行的话试试修改数值)

改成键鼠操作,运行然后进入游戏界面即可。

参考资料

  • directinput科普:https://www.zhihu.com/question/68458175
  • pydirectinput库介绍:https://blog.csdn.net/lylelo/article/details/119882006
  • PUASE问题解决:https://www.likecs.com/ask-672805.html
  • keyboard库介绍:https://blog.csdn.net/weixin_39614322/article/details/111431131

光明旅者的冲刺挑战成就相关推荐

  1. 我的世界服务器成就系统的其他成就是什么,大量的成就奖励亟待领取!《我的世界》【PC版】Hypixel服务器成就系统来啦~...

    原标题:大量的成就奖励亟待领取!<我的世界>[PC版]Hypixel服务器成就系统来啦~ 最近官微一直在关注MINECON 无瑕其他事情,可不今大早起床 总感觉有什么大事要发生(。•ˇ‸ˇ ...

  2. 关于参加大学生挑战杯赛的心得体会

    CSDN话题挑战赛第1期 活动详情地址:https://marketing.csdn.net/p/bb5081d88a77db8d6ef45bb7b6ef3d7f 参赛话题:大学生竞赛指南 话题描述: ...

  3. 横版游戏的摄像机移动理论与实践(上)

    本文较长并有大量动图,请注意流量使用情况. 概述(Overview) <蘑菇11>("Mushroom 11")2015 Untame 上图是开发中的<Mushr ...

  4. 易经六十四卦详解白话文解释——易经64卦全解(上)

    文章目录 第1卦 乾为天(乾卦) 刚健中正 上上卦 第2卦 坤为地(坤卦) 柔顺伸展 上上卦 第3卦 水雷屯(屯卦) 起始维艰 下下卦 第4卦 山水蒙(蒙卦) 启蒙奋发 中下卦 第5卦 水天需(需卦) ...

  5. java系统爬塔游戏,如何玩爬塔游戏?一目了然,每天只需2分钟

    大家好,我叫悦悦."阿拉德谋略站"一启动,"绝望之塔极致冒险"活动就与我们见面了.虽然两者的形式不同,但事实上他们在本质上有点相似,他们都是卡片画,养卡,战斗. ...

  6. 周易六十四卦详解 (通俗易懂版)

    第1卦 乾为天(乾卦) 刚健中正 上上卦 象曰:困龙得水好运交,不由喜气上眉梢,一切谋望皆如意,向后时运渐渐高. 这个卦是同卦(下乾上乾)相叠.象征天,喻龙(德才的君子),又象征纯粹的阳和健,表明兴盛 ...

  7. 八字易经算法之用JAVA实现硬币卜卦辅助工具

    世界上没有一种学问比预测未来更重要:而在全人类预测未来的学问中,没有一种比易经卜卦更重要:而在易经卜卦的所有方法中,用硬币卜卦是最简便.最常用的方法之一. -- 陈嘉珉(http://www.chin ...

  8. 【校招内推】字节跳动2022提前批开启

    Hello 同学们,2022校招研发提前批正式启动,4000+研发岗位Offer来袭!邀请身边优秀的同学加入公司,和全球优秀的同学一起做有挑战成就的事情! 报名时间:2021年7月8日-8月1日 招聘 ...

  9. html5游戏 美术,Steam独立唯美向游戏推荐:岂止游戏,更为艺术

    steam冬季大促即将来临,为了不让大家有钱没地方花,这次我来推荐数款独立唯美向冷门游戏 1.<艾迪芬奇的记忆> 英:What Remains of Edith Finch  提名数项奖项 ...

最新文章

  1. 兰州大学C语言程序设计课程作业,【兰州大学|兰州大学C语言程序设计课程作业( 五 )】语言程序设计|课程|作业-傻大方...
  2. 【LeetCode】【数组归并】Merge k Sorted Lists
  3. 原生js实现JSON.parse()和JSON.stringify()
  4. 学会这二十个正则表达式,能让你少些1000行代码!
  5. 七七计算机论文网,qepipnu
  6. 面试官系统精讲Java源码及大厂真题 - 45 Socket 源码及面试题
  7. 从ListControl控件导出数据到指定路径的的EXCE文档中
  8. 程序员过关斩将--你的业务是可变的吗
  9. criterions的选择
  10. RabbitMQ如何解决被重复消费和数据丢失的问题?
  11. 技校毕业是什么学历_技校毕业是什么学历 属于什么文凭
  12. [转载] numpy逆 python_Python之Numpy详细教程,附Python最新学习资料
  13. Python引用复制,参数传递,弱引用与垃圾回收
  14. 阿里消息中间件ONS消息乱序问题(二)
  15. 常用软件官方下载地址
  16. 三七互娱U3D面试记录
  17. 【Office】excel统计大于某数的个数
  18. linux将文件前面100行导出,linux中,使用cat、head、tail命令显示文件指定行
  19. 【杂谈】什么文章可以给有三AI投稿?你能得到什么
  20. 新手如何做网站?成都网站建设达人浅析——网站制作新手教程

热门文章

  1. 【SSM整合】SSM整合学习-2022详细学习笔记
  2. 尚硅谷SpringBoot核心技术篇---笔记整理2-Spring Boot入门(自用)
  3. 华大芯片时钟调试配置记录
  4. Ubuntu系统中如何进行屏幕截图
  5. 【光学】基于matlab模拟双孔干涉附matlab代码
  6. hexo更换next主题
  7. [RedHat学习笔记]总结现学的所有命令(RH033),以及相关概念。
  8. android归属地显示错误,Android开发【07-18疑问贴】求助大神 来电归属地拖移动问题...
  9. 游戏设计-《游戏改变世界》-思维导图
  10. 一级减速器课程设计(说明书+CAD装配图、零件图)