**
目录
1. 实现原理
2. 实现环境
3. 代码
4. 结果展示
**
- 实现原理
-
利用adb工具获取手机实时截图:
adb shell screencap -p /sdcard/screen.png
adb pull /sdcard/screen.png . -
点击起始位置与落地位置,计算像素距离distance
参考python回调函数的用法 -
计算按压时间,T=K*distance
K可调,本文取1.35 -
用Adb工具点击屏幕蓄力一跳:
adb shell input swipe x y x y time -
重新刷新手机截图
参考python中matplotlib.animation库下FuncAnimation函数
- 实现环境
-
下载,安装Python3
-
adb驱动安装
adb驱动下载地址:https://adb.clockworkmod.com/
下载完后 将adb 命令 添加到系统环境变量里面
打开CMD控制台,输入adb,出现如下界面,即为配置成功。如图
-
设置手机权限
将安卓手机用USB与电脑相连接,在安卓手机上打开开发者模式,并开启USB调试模式,如果以上操作没有任何错误,那么在CMD控制台,执行命令 adb devices可显示当前手机连接的端口号。若十分不幸,adb devices 找不到设备,怎么解决?打开设备管理器,找到你的设备adb点击属性,如图:
找到adb_usb.ini文件,一般在使用者文件.android下,若没有则选择新建这样一个文件,在该文件下添加一行0xXXXX,比如在这里添加ox2D95。
再通过进入 DOS cmd, 输入 adb kill-server,adb devices 便可看到你的设备,这样环境配置就大功告成了!下面开始开始撸代码。 -
Python代码
import os
import time
import numpy
from PIL import Image
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
import cv2
"""
实现过程
1.获取手机实时截图
2.点击起始位置与落地位置
3.计算两个点距离
4.计算按压时间
5.发送按压指令
6.重新刷新手机截图
"""
#os.system('adb shell screencap -p /sdcard/screen.png') #手机获取实时截图
#os.system('adb pull /sdcard/screen.png') #PC端获取截图
#numpy.array(Image.open('screen.png'))
need_update = True
def get_screenimage():
os.system('adb shell screencap -p /sdcard/screen.png') #手机获取实时截图
os.system('adb pull /sdcard/screen.png') #PC端获取截图
return numpy.array(Image.open('screen.png')) #将图片转化为数值矩阵
def distancex_y(point1,point2):
x1,y1 = point1
x2,y2 = point2
dis = ((x2 - x1) ** 2 + (y2 - y1) ** 2) ** 0.5
print('distance = ', dis)
# 根据距离计算按压时间,用Adb工具点击屏幕蓄力一跳
cmd = 'adb shell input swipe 320 410 320 410 {}'.format(int(dis * 1.35))
print(cmd)
os.system(cmd)
def getpoint(event,point=[]):
global need_update
print('point1=',(event.xdata,event.ydata))
point.append((event.xdata,event.ydata))
if len(point)==2:
distancex_y(point.pop(),point.pop())
need_update = True
def update_image(*args):
global need_update
if need_update:
time.sleep(1.5)
axes_image.set_array(get_screenimage())
need_update = False
return axes_image,
figure = plt.figure()#创建空白对象
axes_image = plt.imshow(get_screenimage(), animated = True)#把获取的图片画在坐标轴
figure.canvas.mpl_connect('button_press_event', getpoint)#单击回调函数(传递的是对象不是参数!!)
ani = FuncAnimation(figure, update_image, interval = 50, blit = True) #刷新图片、时间50ms
plt.show()
- 运行结果
图为获取起点、终点坐标以及两点像素距离。
哈哈最后跑了几百分弃游了,怕被腾讯爸爸把号给封了,狗头保命。下一步再去尝试图像处理的方式,实现全自动化。
最后打个广告如果你对python、计算机视觉等方向也比较感兴趣,欢迎关注公众号,作者不定期更新一些学习资源,大家一起学习呀!