按键手机助手!急。只能执行第一个子程序就罚站了,调试没问题。

用按键精灵手机助手写了一个脚本程序 (用PC端模拟器调试的,循环执行一套动作),调试一切正常,生成小精灵后再用PC端模拟器执行,只能执行脚本程序中的第一个子程序。是什么原因,怎么解决?感谢!代码如下:

Dim y =Int(501 * Rnd() + 500)
Do
    Call ZG()
    For 120
        Call PG()
        Call SG()
        Call CSW()
    Next
    Call HG()
Loop 
Sub ZG()
    Randomize
    //展开快捷栏
    Dim z,k
    z = Int(60 * Rnd() + 1200)
    k = Int(33 * Rnd() + 326)
    Dim a,b
    a = Int(59 * Rnd() + 904)
    b = Int(63 * Rnd() + 223)
    Tap z, k
    Delay y
    //默认点击快捷键2
    Tap a, b 
    Delay y
End Sub
//找到抛出并点击,否则找武器点击后抛出
Sub PG()
    Randomize
    Do
        Dim intX,intY
        FindPic 931,586,1075,719,"Attachment:paogan.png","000000",0,0.9,intX,intY
        If intX > -1 And intY > -1 Then 
            Dim p,c
            p = Int(64 * Rnd() + 972)
            c = Int(65 * Rnd() + 619)
            Tap p,c
            Delay y
            Exit Do
        Else 
            Dim intX1,intY1
            FindMultiColor 1001,446,1208,611,"C2C2C2","12|20|CBCBCB,4|23|CBCBCB,29|44|C1C1C1",0,0.9,intX1,intY1
            If intX1 > -1 And intY1 > -1 Then 
                Dim w,q
                w = Int(66 * Rnd() + 1080)
                q = Int(66 * Rnd() + 483)
                Tap w,q
                Delay y
            End If
        End If
    Loop
End Sub         

// 收回
Sub SG()
    Randomize
    Do
        Dim intX,intY
        FindMultiColor 1023,429,1188,599,"DFBC9F","4|6|F3C59F,3|-1|C9A78C,4|-2|B99D85",0,0.9,intX,intY
        If intX > -1 And intY > -1 Then 
            Exit Do
        End If
    Loop
    Dim s,g,l
    s = Int(66 * Rnd() + 1080)
    g = Int(66 * Rnd() + 483)
    l = Int(6 * Rnd() + 10)
    For l
        Tap s,g
        Delay y
    Next
End Sub
Sub CSW ()
    Randomize
    Dim o 
    o =Int(501 * Rnd() + 500)
    Dim eat
    eat =Int(2001 * Rnd() + 6000)
    Dim intX,intY
    FindPic 84,36,213,69,"Attachment:baoshidu.png","000000",0,0.9,intX,intY
    If intX > -1 And intY > -1 Then 
        Dim a,b
        a = Int(65 * Rnd() + 1200)
        b = Int(30 * Rnd() + 328)
        Tap a, b
        Delay o
    End If
    Dim c,d
    c = Int(42 * Rnd() + 233)
    d = Int(55 * Rnd() + 1104)
    Tap d,c
    Delay o
    Dim i,j
    i = Int(62 * Rnd() + 1082)
    j = Int(50 * Rnd() + 491)
    Tap i, j
    Delay eat
    Call ZG()
End Sub
Sub HG()
    Randomize
    Dim y 
    y = Int(1001 * Rnd() + 1000)
    Dim q,r
    q = Int(74 * Rnd() + 1152)
    r = Int(43 * Rnd() + 217)
    Tap q, r
    Delay y
    Dim a,b
    a = Int(47 * Rnd() + 348)
    b = Int(50 * Rnd() + 639)
    Tap a,b
    Delay y
    Dim c,d
    c = Int(63 * Rnd() + 774)
    d = Int(69 * Rnd() + 624)
    Tap c, d
    Delay y
    Dim e,f
    e = Int(72 * Rnd() + 201)
    f = Int(43 * Rnd() + 660)
    Tap e,f
    Delay y
    Dim g,h
    g = Int(127 * Rnd() + 707)
    h = Int(33 * Rnd() + 477)
    Tap g, h
    Delay y
    Dim i,j
    i = Int(62 * Rnd() + 678)
    j = Int(60 * Rnd() + 88)
    Tap i, j
    Delay y
    Dim k,l
    k = Int(68 * Rnd() + 99)
    l = Int(40 * Rnd() + 663)
    Tap k, l
    Delay y
    Dim m,n
    m = Int(62 * Rnd() + 776)
    n = Int(63 * Rnd() + 626)
    Tap m, n
    Delay y
    Dim o,p
    o = Int(37 * Rnd() + 1200)
    p = Int(32 * Rnd() + 10)
    Tap o,p
    Delay y
End Sub

请解答

参考GPT和自己的思路,从代码来看,循环应该是没有问题的。在 PC 端模拟器调试正常,但在生成的小精灵上只执行第一个子程序,这可能是因为按键精灵手机助手的工作原理和 PC 端模拟器有所不同,导致脚本无法正常执行。为了解决这个问题,你可以尝试以下方法:

确保按键精灵手机助手和模拟器都已经升级到最新版本,以确保兼容性问题的最小化。

确保手机和模拟器的分辨率和 DPI 设置是一致的,这有助于保持 UI 的稳定性。

检查脚本中的变量是否正确设置,以及每个子程序是否正确返回。

尝试逐步调试代码,以找出问题所在。你可以在代码中添加一些日志来辅助调试,例如记录每个子程序的执行情况,以及变量的值等等。
在生成的小精灵中只能执行第一个子程序,原因可能是小精灵中的循环控制有问题。你可以尝试对程序进行以下修改:

1 将循环语句 For 120 修改为 For i = 1 To 120。
2 在 CSW() 子程序的最后加上 Delay o,让程序等待一段时间。
3 在主程序的 Loop 前加上 Delay y,让程序等待一段时间。
这些修改应该可以让小精灵能够正确执行程序中的循环控制和延迟等操作。

该回答内容部分引用GPT,GPT_Pro更好的解决问题
这个问题可能是由于脚本程序中的子程序没有正确地调用引起的,在程序中,第3行的call z6()就没有正确调用,所以只能执行到第一个子程序。
要解决这个问题,首先要保证所有的子程序都被正确调用,然后检查代码中是否有任何逻辑错误,例如循环的条件是否正确,变量是否正确声明等。

另外,如果希望能够正常执行脚本,还需要检查PC端模拟器的版本是否正确,并保证脚本使用的API函数也都正常工作。

总之,要解决这个问题,首先要保证所有的子程序都能正确调用,然后检查代码中是否存在逻辑错误和版本不兼容、API函数不能正常使用的情况。
如果回答有帮助,望采纳。

该回答引用ChatGPT

可能有以下几个原因导致程序无法正常执行:

1、模拟器的分辨率和手机的分辨率不同,导致坐标计算错误。在调试时,您可能使用的是PC端模拟器,而生成的小精灵在手机上运行时,由于分辨率的不同,导致程序无法正确地定位到目标。请检查小精灵生成的坐标是否正确,并根据实际情况进行修改。

2、某些步骤在手机上需要权限才能执行。例如,有些操作需要您允许小精灵的悬浮窗权限,否则无法执行。请检查您的手机权限设置,确保小精灵具有所需的权限。

3、脚本程序中存在一些随机数的生成。这些随机数可能导致程序在模拟器上执行时,与在手机上执行时产生不同的结果。建议将这些随机数的范围限定在较小的区间内,以保证在不同的环境下都能产生相似的结果。

4、脚本程序中存在一些操作需要等待一定的时间才能执行。例如,有些操作需要等待一段时间后才能看到目标出现。如果您的等待时间设置不正确,可能会导致程序无法正确执行。建议根据实际情况调整等待时间,确保操作能够在正确的时间执行。

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
1、坐标计算问题。在您的程序中,很多操作都是基于坐标来实现的。由于模拟器和手机的分辨率可能不同,导致坐标计算有偏差。可以在小精灵的录制模式中进行坐标校准,或者使用其他方法来计算正确的坐标。下面是一个示例代码,使用了像素比例和偏移量来进行坐标计算,可以根据实际情况进行调整:

' 设置像素比例和偏移量,根据实际情况进行调整
Dim ratioX = 2.0, offset_X = 100
Dim ratioY = 2.0, offset_Y = 200

' 计算修正后的坐标
Dim x = Int((z - offset_X) * ratioX)
Dim y = Int((k - offset_Y) * ratioY)

' 在修正后的坐标上执行操作
Tap x, y

2、随机数生成问题。在您的程序中,有一些操作是基于随机数来实现的。这样的操作在不同的环境下可能会产生不同的结果,导致程序无法正常执行。可以限定随机数的范围,确保在不同的环境下产生相似的结果。下面是一个示例代码,使用了固定的随机数种子来生成随机数,可以确保在不同的环境下产生相同的结果:

' 固定随机数种子,确保在不同的环境下产生相同的结果
Randomize 12345

' 生成随机数
Dim x = Int(10 * Rnd() + 1)


3、时间等待问题。在您的程序中,有些操作需要等待一段时间后才能执行。如果等待时间设置不正确,可能会导致程序无法正常执行。可以根据实际情况调整等待时间,确保操作能够在正确的时间执行。下面是一个示例代码,使用了固定的等待时间来确保操作能够在正确的时间执行:

' 等待一段时间后执行操作
Delay 1000


修正代码如下:

' 设置像素比例和偏移量,根据实际情况进行调整
Dim ratioX = 2.0, offset_X = 100
Dim ratioY = 2.0, offset_Y = 200

' 固定随机数种子,确保在不同的环境下产生相同的结果
Randomize 12345

' 等待的时间,根据实际情况进行调整
Dim waitTime = 1000

Dim y = Int(501 * Rnd() + 500)

Do
    Call ZG()
    For 120
        Call PG()
        Call SG()
        Call CSW()
    Next
    Call HG()
Loop

Sub ZG()
    Dim z, k, a, b
    z = Int(60 * Rnd() + 1200)
    k = Int(33 * Rnd() + 326)
    a = Int(59 * Rnd() + 904)
    b = Int(63 * Rnd() + 223)

    ' 计算修正后的坐标
    Dim x1 = Int((z - offset_X) * ratioX)
    Dim y1 = Int((k - offset_Y) * ratioY)
    Dim x2 = Int((a - offset_X) * ratioX)
    Dim y2 = Int((b - offset_Y) * ratioY)

    ' 在修正后的坐标上执行操作
    Tap x1, y1
    Delay waitTime
    Tap x2, y2
    Delay waitTime
End Sub

' 修正其他子程序的代码,与上面的方式类似


您好,关于您提出的按键手机助手,只能运行第一个子程序的问题。建议按如下步骤步骤检查:
首先,确保您的程序在生成小精灵前是正确的,因为之前是可以,有不小心动了哪里的代码导致的可能性,比如进入了死循环,或者需要按下一个健才会执行。
其次,检查生成小精灵的工具,有没有哪一步没有执行正确或者遗漏的。不然,如果之前可以,一般做成小精灵也可以的。
再次,如果还没解决,建议一个一个方法注释掉先,再把代码一个一个往上加,加一个测试一下,这样绝对能定位到是哪块代码的问题。就是需要点时间。

可能是小精灵生成后,调用的脚本程序中包含了循环执行的语句,导致只执行第一个子程序。

解决方法是将循环执行的语句单独写成一个子程序,然后在主程序中调用该子程序。这样小精灵就会按照你期望的顺序执行所有子程序了。另外,建议在程序中添加异常处理,方便发现错误并进行调试。

代码似乎没啥问题,建议检查一下模拟器是否支持连续执行脚本,以及是否有相关的设置需要更改