ahk脚本如何在没有递归的情况下调用自身?

时间:2017-09-10 09:09:12

标签: autohotkey

我的autohotkey脚本总是崩溃,因为每隔3-5分钟,我不知道为什么没有错误信息或为什么会崩溃?递归可能吗?任何人都可以建议我如何回到顶部 main并继续脚本而不像递归一样调用自己? 我对这种语言有点新意,希望你帮助我

继承我的代码

 home::
    main()
    {
    loot1() 
    }


    loot1()
    {
    ImageSearch,violetX, violetY, 266, 141, 579, 527, C:\image\loot.png
    If ErrorLevel
    mobs1() 
    else
    mousemove(%violetX%, %violetY%)
    MouseClick, left 
    main()
    }


    mobs1()
    {
    PixelSearch, X, Y, 22, 216, 776, 607, 0x00FF00, 0, fast
    If ErrorLevel
    mobs2()
    else
    mousemove(%X%, %Y%)
    MouseClick, left
    main()

    }


    mobs2()
    {
    ImageSearch,mobs2x, mobs2y, 243, 76, 776, 607, C:\image\green.png
    If ErrorLevel 
    tele() 
    else
    mousemove(%mobs2x%, %mobs2y%)
    MouseClick, left
    main()
     }

    tele()
    {
    ImageSearch,walkX, walkY, 394, 347, 413, 414, C:\image\walk.png
    If ErrorLevel
    tele2()
    else
    MouseClick, left, 200, 300
    main()


    }

    tele2()
    {
    Send {F9}
    sleep, 2000
    main()
    }
    return

编辑2 heres到目前为止,但它没有返回主循环

home::
Loop
    {
     loot1()        
    }
return




    loot1()
    {
    ImageSearch,violetX, violetY, 266, 141, 579, 527, C:\image\loot.png
    If ErrorLevel
    mobs1() 
    else
    mousemove(%violetX%, %violetY%)
    MouseClick, left 

    }


    mobs1()
    {
    PixelSearch, X, Y, 22, 216, 776, 607, 0x00FF00, 0, fast
    If ErrorLevel
    mobs2()
    else
    mousemove(%X%, %Y%)
    MouseClick, left


    }


    mobs2()
    {
    ImageSearch,mobs2x, mobs2y, 243, 76, 776, 607, C:\image\green.png
    If ErrorLevel 
    tele() 
    else
    mousemove(%mobs2x%, %mobs2y%)
    MouseClick, left

     }

    tele()
    {
    ImageSearch,walkX, walkY, 394, 347, 413, 414, C:\image\walk.png
    If ErrorLevel
    tele2()
    else
    MouseClick, left, 200, 300 ;-- walk



    }

    tele2()
    {
    Send {F9}
    sleep, 2000
    }
    return

1 个答案:

答案 0 :(得分:0)

调用自身几乎就是递归意味着所以我不认为“在没有递归的情况下调用自己”是可能的。

如果您想重复拨打loot1(),则需要从其他功能中删除main()功能及其所有来电,并将其替换为:

home::
    Loop {
        loot1()
    }

    loot1() 
    {
    ; the rest of your code the same