• 按键公众号 :
按键精灵电脑版
立即下载

软件版本:2014.06
软件大小:22.9M
更新时间:2021-12-03

按键精灵安卓版
立即下载

软件版本:3.7.2
软件大小:46.2M
更新时间:2023-05-10

按键精灵iOS版
立即下载

软件版本:1.8.0
软件大小:29.2M
更新时间:2023-03-21

按键手机助手
立即下载

软件版本:3.8.0
软件大小:262M
更新时间:2023-05-30

快捷导航

登录 后使用快捷导航
没有帐号? 注册

发新话题 回复该主题

[MQ手机按键]检测判断游戏是否卡屏 [复制链接]

1#
思路:
1.选取游戏中连续变化的几个点为依据来判断是否卡屏
2.使用GetPixelColor函数获取这几个点的颜色
3.把各个点的颜色作为字符串合成一段特征值
4.实时获取几个点的颜色,对比特征值
5.如果特征值在指定时间一直未变则判断卡屏
6.判断卡屏后进行后续的操作
例子:

以TAPTAP为例

1.TAPTAP首页中该方框为视频,连续变化中,选取三个点存入表用作检测并获取特征码


  1. Dim 卡点检测点 = {{174,376},{565,377},{120,525}}
  2.     Function 卡屏点取值()
  3.         //检测卡点,生成特征码
  4.         Dim str = ""
  5.         For i = 1 To CInt(UBOUND(卡点检测点)) + 1
  6.             str = str&GetPixelColor(卡点检测点[i][1],卡点检测点[i][2])
  7.         Next
  8.         卡屏点取值 = str
  9.     End Function
复制代码
2.1 定义一个初始的特征码用作对比,设置一个定时器和检测时间

2.2 定义一个变量判断卡屏次数,并设定误判上限值,防止程序误判
  1. Dim 初始卡屏点取值 = 卡屏点取值()
  2.     Dim 卡屏检测定时器 = TickCount()
  3.     Dim 卡屏检测时间 = 10*1000
  4.     Dim 检测到卡屏次数 = 0,卡屏误判上限 = 3
复制代码
3.写一个函数来判断卡点
  1. Function 卡屏判断程序()
  2.         Dim 卡屏比对取值 = 卡屏点取值()
  3.         //特征值不一样则重置检测时间,重置卡屏次数
  4.         If 初始卡屏点取值 <> 卡屏比对取值 Then
  5.             卡屏检测定时器 = TickCount()
  6.     检测到卡屏次数 = 0
  7.             初始卡屏点取值 = 卡屏比对取值
  8.     TracePrint "未发现卡死,辅助稳定运行中"
  9.         End If
  10.         //前后两个特征值一样并超过了卡屏检测时间则判断卡屏一次
  11.         If TickCount() - 卡屏检测定时器 >= 卡屏检测时间 Then
  12.     初始卡屏点取值 = 卡屏点取值()
  13.     检测到卡屏次数 = 检测到卡屏次数 + 1
  14.     TracePrint "检测到卡屏次数:"&检测到卡屏次数
  15.     //卡屏次数大于误判上限则判断为卡屏,并执行后续操作
  16.     If 检测到卡屏次数 >= 卡屏误判上限 Then
  17.     检测到卡屏次数 = 0
  18.     Call 卡屏操作()
  19.     End If
  20.     卡屏检测定时器 = TickCount()
  21.         End If
  22.     End Function
复制代码
4.发生卡屏进行后续操作,重启应用
  1. Function 卡屏操作()
  2.         //检测到卡屏后重启应用
  3.     ShowMessage "检测到卡屏,准备重启游戏", 1000:TracePrint "检测到卡屏,准备重启游戏"
  4.     Delay 1000
  5.         Dim app包名 = "com.taptap"
  6.         KillApp app包名
  7.         Delay 1000
  8.         RunApp app包名
  9.         ShowMessage "已重启完毕,等待进入游戏", 3000:TracePrint "已重启完毕,等待进入游戏"
  10.         Delay 3000
  11.     End Function
复制代码
完整代码:
  1. //可添加任意个检测点,点数越少运行效率越高
  2. Dim 卡点检测点 = {{10,10},{50,50},{100,100},{150,150},{200,200}}
  3. Dim 初始卡屏点取值 = 卡屏点取值()
  4. Dim 卡屏检测定时器 = TickCount()
  5. Dim 卡屏检测时间 = 10*1000
  6. //调整卡屏误判上限值,防止程序误判
  7. Dim 检测到卡屏次数 = 0,卡屏误判上限 = 3

  8. Function 卡屏判断程序()
  9.     Dim 卡屏比对取值 = 卡屏点取值()
  10.     If 初始卡屏点取值 <> 卡屏比对取值 Then
  11.         卡屏检测定时器 = TickCount()
  12. 检测到卡屏次数 = 0
  13.         初始卡屏点取值 = 卡屏比对取值
  14. TracePrint "未发现卡死,辅助稳定运行中"
  15.     End If
  16.     If TickCount() - 卡屏检测定时器 >= 卡屏检测时间 Then
  17. 初始卡屏点取值 = 卡屏点取值()
  18. 检测到卡屏次数 = 检测到卡屏次数 + 1
  19. TracePrint "检测到卡屏次数:"&检测到卡屏次数
  20. If 检测到卡屏次数 >= 卡屏误判上限 Then
  21. 检测到卡屏次数 = 0
  22. Call 卡屏操作()
  23. End If
  24. 卡屏检测定时器 = TickCount()
  25.     End If
  26. End Function

  27. Function 卡屏点取值()
  28.     //检测卡点,生成特征码
  29.     Dim str = ""
  30.     For i = 1 To CInt(UBOUND(卡点检测点)) + 1
  31.         str = str&GetPixelColor(卡点检测点[i][1],卡点检测点[i][2])
  32.     Next
  33.     卡屏点取值 = str
  34. //    TracePrint "卡屏点取值:"&str
  35. End Function

  36. Function 卡屏操作()
  37.     //检测到卡屏后重启应用
  38. ShowMessage "检测到卡屏,准备重启游戏", 1000:TracePrint "检测到卡屏,准备重启游戏"
  39. Delay 1000
  40.     Dim app包名 = "设置重启包名"
  41.     KillApp app包名
  42.     Delay 1000
  43.     RunApp app包名
  44.     ShowMessage "已重启完毕,等待进入游戏", 3000:TracePrint "已重启完毕,等待进入游戏"
  45.     Delay 3000
  46. End Function

  47. //放在主线程中循环判断或放在子线程中实时监测
  48. Function main()
  49.     Do
  50.         Delay 100
  51.         Call 卡屏判断程序()
  52.     Loop
  53. End Function

  54. Call main()
复制代码

2#

感谢分享,教程达人勋章送给你了

3#

学习。

4#

太赞了,非常感谢!03

5#

厉害厉害厉害

6#

建议用鼠标点击频率来检测卡屏.超实用

发新话题 回复该主题