无休止的while循环和旧的已删除代码(弹出式窗口)……很好的“弹出式窗口”。

时间:2019-04-01 15:14:11

标签: python jython sikuli-ide sikuli-x

自从开始在多个项目中使用Sikuli以来,我一直在努力解决一个奇怪的问题。我一直在使用IDE,后来由于代码中发生了奇怪的事情而试图进行扩展。如果要使用弹出窗口更早地调试代码,则可以保存代码,甚至重新启动PC,甚至可以在其他文本编辑器中检查代码,但是有时会弹出现在不存在的弹出窗口(和旧代码)。最终,我通常会放弃原始文件,有时不得不奇怪地注释掉行并一次重新添加它们(尽管在大范围内,结束脚本与之前执行所有操作之前相同) 。我实在无话可说。

这让我很难区分不好的代码和其他地方出现的问题。有人知道什么可能导致此“幻像代码”吗?因为我真的很茫然。

我想咨询一下我<(inputvariable)出了什么问题。我根本不知道可能出什么问题了,我是否正在寻找某些东西?

目前,我正在通过Sikuli IDE运行所有脚本。我确实想学习如何编写脚本并包括sikuli,希望我可以将其整齐地打包,但是我似乎无法将其包裹住。

对于while循环,将其与“ SSLoops”进行比较,我不明白为什么在满足条件时它没有脱离循环。 (打印在数字的上方和之外。)

我不得不做一些奇怪的解决方法,例如注释掉整个代码部分,试图使其正常工作,然后慢慢地逐步引入它,直到它完全与旧脚本匹配为止。如果我将脚本复制到一个新文件中以进行更清晰的复制,则希望能够解决某种缓存问题(?),但通常我必须再次进行修改。

BP = getBundlePath()
print(BP)
setBundlePath(BP + "\images")
BP2 = getBundlePath()
print(BP2)

# Regions
gameRegion = Region(230, 138, 1442, 875)
matchSpeedRegion = Region(1282, 920, 162, 91)
rewardRegion = Region()


def main():
    SSLoops = input("How many times would you like to run Super Smash?")
    SuperSmash(SSLoops)


def SuperSmash(SSLoops):
    print(SSLoops)
    i = 1
    while i < SSLoops:
        print(i)
        print(SSLoops)
        if exists("btnEnterSuperSmash.PNG"):
            click("btnEnterSuperSmash.PNG")
        while True:
            if exists("btnReward.png"):
                print("Completed! On to Rewards.")
                #selectRewards()
                break
            else:
                pass
            if matchSpeedRegion.exists("btnStart.png"):
                matchSpeedRegion.click("btnStart.png")
                matchSpeedRegion.wait("btnRetreat.png", 3600)
                if matchSpeedRegion.exists("btnSpeedUp.png"):
                    matchSpeedRegion.click("btnSpeedUp.png")
                    print("clicked x1")
                print("clicking retreat")
                matchSpeedRegion.click("btnRetreat.png")
                matchSpeedRegion.wait(Pattern("btnRetreat.png").similar(0.65), 3600)
                print("clicking okay")
                gameRegion.click("btnOK.png")
                wait(2)
                gameRegion.wait("btnOK.png", 3600)
                gameRegion.click("btnOK.png")
        print("Completed!")
        i = i + 1


if __name__ == '__main__':
    main()

我一直在弹出窗口说“嘿”,因为我在真正的btnRewards循环中运行了一个函数说“嘿”-希望最终可以从5张图像中选择一个奖励。但是在删除它之后,由于我正试图排除主循环的麻烦,它仍然弹出。

将用户输入变量与i进行比较的循环不断增加。压痕对我来说还好吗?但是我一定错了吗?还是有其他原因使它出错?

我一直在使程序在文件夹上运行,因此打破循环的图片立即出现,因此从理论上讲,它应该运行输入的次数,而没有其他任何事情(1)。任何帮助深表感谢。

====
1
1
1

[log] CLICK on L[889,656]@S(0) (568 msec)

Completed! On to Rewards.

Completed!
2
1

[log] CLICK on L[889,656]@S(0) (565 msec)

Completed! On to Rewards.

Completed!
3
1

[log] CLICK on L[889,656]@S(0) (584 msec)

Completed! On to Rewards.

Completed!
4
1
====

1 个答案:

答案 0 :(得分:0)

您的问题:input()返回类似“ 4”的字符串

然后使用 while i < SSLoops:

始终为True,因此循环不会结束。

使用 SSLoops = int(input("How many times would you like to run Super Smash?"))将解决您的问题。

请注意:如果给定的输入无法转换为整数值,则会崩溃。

建议:调试打印应如下所示: 打印“ SSLoops =“,SSLoops

所以输出的可读性更好。

SikuliX的RaiMan(向您的猫打招呼;-)