好,我们今天来看这个朋友啊,他提的一个问题啊,他说度循环里面有多个子程序, 对其中一个子程序设定调用次数,或者子程序 比调用次数限定啊,请老师解惑啊。他的意思应该就是在一个循环里面啊,限制一个函数的字形次数啊,他说的子程序应该是函数的意思啊,然后我们来看一看代码怎么写吧, 因为这是一个对于初学者来说啊,应该是很容易碰到的问题吧。我们现在看一看啊,我们常规的,我们常规的 呃度循环,它是无限循环,对不对啊?它的意思是在里面,如果我们要给一个呃指函数,设定它的指线次数的话,应该怎么写?那我们在这里就写一个函数啊, 我们写一个函数一,然后我们函数一只做一个输出啊,就写函数一,然后再写一个函数二。 好,然后我们在前面啊,在这个度循环里面来调用这个函数一和函数二。 好,我们来启动脚本啊,我们来看他的输出啊,是什么样的情况?好,我们停止。 好,我们可以看到啊,我们的输出就是什么,就是不断的输出函数一和函数二,看见没有?就是一二,一二,一二,那这样重复的输出, 那如果我们想啊,限制一下某个函数啊,他先输出多少次,然后再输出函数啊, 比如说这个一,好吧,我们先让它输出五次,再输出函数二,对吧?那我们就 four 啊,五,然后 next 在中间啊,插入这个函数一,因为我们的循环 是可以嵌套的,能不能明白?我们的循环可以嵌套,包括你在度循环里面,你还可以写一层度循环啊,然后你在这个内层的度循环里面,你还可以继续嵌套,他这个嵌套是无穷无尽的啊, 当然这种圈套你要考虑他有没有这个必要性,因为我们的度循环是什么?是无限循环 是吧?那我们最内层的这个度循环,他一旦开始执行的话,他就跳不出去了啊,如果你不给他设置这种跳出的这个条件的话,他会一直在这个最内层的度循环里面循环,所以我们度循环的欠套啊,一般来说是没有必要的啊,但是我们度循环欠套, 复循环啊,是啊,可以的啊,是经常会使用的,比如说这里啊,这里我们要复循环五次 函数一,我们才会执行这个函数二,我们可以在后面啊,打一个断点,循环一次之后我们打个断点,这样看起来比较清楚一点啊,我们调试 好,我们结束程序,你看我们下面的输出窗口看见没有?他有一二三四五,对吧?有五个函数一,然后呢?有一个函数二, 看见没有?这样我们就可以设置啊,最简单的设置某个函数,先执行多少次啊?然后再执行函数二。 好,我们还可以再进一步啊,再进一步。假如说啊,我想在前五次循环里面啊,执行函数一和函数二,从第六次循环开始啊,我就不再执行函数一了,那我们可以怎么写呢?我们这个时候可以引入一个啊技术 的机制啊,计数器,他不是某个函数啊,他是我们经常会使用的一个编程技巧。 一般来说我们会用英文单词的话,用这个单词啊, index 是缩影,如果是中文的话就用啊,就可以叫它计数器,我们把这个计数器然后等于零啊,初始是等于零,然后每一次循环的时候,我们让这个计数器啊, 然后去递增,递增就怎么写啊?递增等于啊加一, 这就是递增啊,这是递增。然后我们每次循环的时候,我们计数器的数量啊,就会啊,计数就会加一,从零开始变成一二三四五啊,变成一二三四五,所以我们可以在前面怎么写呢?加一个 e 函数啊,判断 条件语句,如果计数器啊,如果计数器小于六的时候, 小于六就是零,一二三四五啊,可以执行六次,那能不能明白?小于六的时候我们执行啊?函数一, 那我们现在来看啊,他会去有一个什么样的效果啊?他会有个什么样的效果?我们在最后的一次循环结束的时候啊,给他说出一个 杠啊,这样去看的话,他的信息就看的比较清楚一点,然后我们来调试,好停止调试,我们可以看到啊, 前面啊,函数一二,看见没有?函数一二,函数一二一二一二一二,这有几个?一二 一二三四五六,对吧?只有六个一和二,他前六次输出都有一和二,从第七次开始,你看他就没有一了,能不能明白?你看他这里就没有一了, 所以我们可以通过计数器啊,来控制我们里面具体的一个函数啊,他需要执行多少次? 好当一个程序啊,足够复杂的时候啊,我们计数器啊,往往一个是不够用的啊,往往是一个是不够用的,比如说这里啊,我们给他写一个计数器二, 然后在下面还是一样啊,计数器二等于计数器二加一,然后我们在后面呢,用这个二来详细的控制。什么?控制我们的函数二,能不能明白 这样大鱼啊,我,小鱼啊,小鱼十二。嗯, 像这样那么明白。再一个程序,当你写的足够复杂的时候啊,如果你想进行一个详细的啊,这种次数的控制的话,就可以引入计数器, 通过计数器来啊,详细的控制我们每一个函数啊,他要执行的次数啊,这一期代码很简单啊,但是我们涉及到的思想很重要,这是一个常见的编程手段啊,引入计数器,让计数器在我们的循环里面进行一个递增, 通过计数器的判断啊,依附一句,通过判断计数器的这个数值啊,来调整我们的函数执行次数,这是一个非常常用的编程手段。
粉丝3.0万获赞9.2万



我们上一次讲了找色,那我们今天来讲了讲找图啊找图,我们把这些代码都删掉啊,然后直接插入找图命令, 我们可以发现啊,找图的命令和找色的命令,他们的格式还是非常雷同,看见没有?还是非常雷同,他还是一样啊,在某个区域去找我们的指定的图片, 注意看这个图片的格式啊,前面有一个啊,固定的单词,后面是一个冒号加一个斜杠,然后呢加上我们的图片名啊,最后的格式是 bmp, 然后后面是一个相似度,之前我们讲 相似度最高是一对吧?好,然后呢,越低相似度越低,我们的误差呢就越大。最后呢,把我们找到了图片坐标, 把它复制给啊,把它复制给我们的变量, int x 和 int y 它还是一样啊,它帮我们省略了声明这个变量的这个步骤,但是我们可以自己声明,对吧?我们可以自己声明, 当然你不声明也没有问题啊,我这里声明一下了,还是方便你们理解啊, 我们写个注释吧, 我们来看啊,我们怎么去理解这个格式啊?他这个格式的意思是我们要在附件里面啊,我们要在附件里面把我们的图片给添加进去。我们这里还是要利用一下我们的抓抓工具啊,用一下我们的抓抓, 然后我们在网页这一边按一下截图键,那我们可以框选框,选任意一个区域,在框选完毕以后呢, 他可以看到一个菜单,对吧?有一个未图令重围,我们可以把它重温一下,比如说我们把它取个名字啊,随便取一个吧,叫一,你看 还可以选择一个格式,他默认就是二十四位位图。好,我们点保存,然后呢我们在附件里面点添加,我们选择这张图片, 然后呢我们在这里把我们的文件名改为一,和我们的这里的文件名要对应, 明白吧?最后我们做个测试啊,我们把鼠标把它移动到我们的 这个坐标点,我们可以看到啊,我们的图片是这个,对吧?灵感加速 驶向未来,那我们这个界面有没有?没有?那我们现在启动程序他是找不到的,我们一定要等我们的这个图片他轮换到这里来,那我们才可以找到,对吧? 但是我们的代码呢?他只会在我们的程序启动的时候找一次,假如说我们程序启动的时候,我们的这个图片他没有显示的话, 那我们的代码他就找不到,我们可以写个 s 啊, if 这里 if int x 大于零 and int y 大于零这句话的意思表明,我们找到了图片,因为它的 x y 原本是没有值的, 我们永远没有复制,只有当他被找到以后,他们才会被复制,他们被复制以后呢,他们就不会等于零了。所以说呢,我们在上面呢 可以写一个提示啊,找到了下面我们可以写个提示啊,没有找到。 你看在没有这张图片的时候呢,我们启动他肯定是提示没有找到,对吧?当我们去 把它换到我们的图片上面的时候呢,你看我们切到这里来,我们再跑, 你看他就会提示找到了。就是我们有的时候会有这样一种应用需求,就是我并不知道这个图他什么时候会出现,比如说这个界面,对吧?他的图片轮换什么时候可以轮换到这张图啊? 这个我们是无法确定的,对吧?你也不知道是一秒钟之后还是十秒钟之后。那我们可以一直去监测啊,用一个循环来不断的去监测他,比如说我们这样写, 还记不记得以前我们学过一个 rim 标签,对吧?标签循环, 好,我刚才完善了一下代码,我在这里写了 标签 rim 标签循环。我们之前学习循环的时候啊,无限循环的时候学习过这个标签循环,他的意思就是说我们用一个沟通语句,可以随时返回到这个代码,返回到这行代码从第五行开始重新执行。 那么我们整个代码的逻辑就是什么呢?我们去不断的找这个图片,一直找一直找, 找到了我们就弹出一个对话框,告诉我们找到了,找不到了,找不到,我返回这个循环这里继续找。 也就是说这个图片我们会在一个无限循环里面不停的去找,一直到我们找到为止。找到以后这个循环还会不会继续啊?找到以后我们这个循环呢?他就不会继续了啊,这个程序会往后面执行, 会指定第十三行啊,提示我们图片已找到啊,程序继续执行,循环已跳出啊,到这里的时候循环就跳出了。 那为了避免我们的程序找出的频率过高啊,我们最后还是给他加一个 delay 延迟,尤其像这种无限循环了。无限循环我们还是最好给他加一个延迟参数比较好, 这样以免对我们的 cpu 造成过高的负债啊, 你可以写的短一点十毫秒啊,那也总比不写强啊, 我们写在这个循环标签的 go to 之前,也就是说我们每次找图会间隔十毫秒,如果找不到,我们在十毫秒之后呢,会继续找整个代码,就是这个意思啊,我们点一下调试, 然后去看我们的浏览器,刚才不小心关掉了,这样酷, 好,我们现在就可以启动了啊,我已经启动来看见没有,我们的图片切过来的时候呢,他就提示我们找到了,对吧?那图片一找到程序继续执行循环与跳出,对不对?你看这个时候,我们下次 图片滚过来的时候,我们还会不会去找啊?我们就不会了,你看我们手动去点一下啊, 你看还有没有提示?没有了,因为这个时候我们循环已经跳出了,他只找一次,对吧?在他找到图片以前,他是不会放弃去找的,他会一直找,在他找到图片以后呢,他就不找了啊,对吧?他就不找了,循环也跳出。 所以当我们去找一个比较固定的图片,比如说上面的菜单,他们的位置是比较固定的,而且一般来说不会发生变化。 那我们可以直接去啊,直接去写一行代码就可以去找了,像这样直接写一行就可以了,对吧?你也不用加入循环,那如果说这个图片他是会产生变化的, 他不一定什么时候会出现在我们的屏幕上,那我们就可以用什么思路啊,就可以用循环啊,用循环的思路来去找这个图,找不到就不停止。 那在这里呢,我们就还额外说一点延伸的内容啊,延伸的内容,你们就是需要了解一下就可以了啊,不需要特别去理解, 这是我们找图的底层原理,他其实还是找色。我们一张图片他是由什么东西组成啊?他还是由一个一个像素组成的,对吧?每一个像素点就有一个颜色,那么我们一个图片它本质上就是若干个 颜色点的排列组合,这句话不知道你们能不能理解啊?比如说我们放大一张图片, 我们可以看到啊,它是有很多一个一个小的方格,对不对?你看一个一个小的方格,我们这个时候用抓抓,抓一下啊, 我们看一下桌窗。好,你看我们把鼠标移动到我们的这个有渐变颜色的黑色这一块啊,你看这一块,我们屏幕上面可以看到,对不对? 从左到右,你看我们的颜色值,他有一个渐变,对不对? 好,你看我取了两个颜色,一个五九二四五八啊,一个五九三四五八,他们的颜色就是不一样的,对不对?那其实呢,如果说我们早涂的 逻辑是什么?他就是先判断你第一个点的颜色啊,是不是这个颜色,如果是的话,他再判断第二个点的颜色是不是这个颜色啊?如果是的话,他依次类推,继续往后找, 只要我们所有的颜色排列和我们的图片的颜色排列吻合,那我们这个图片就算是啊,找到了,他是这样一个逻辑,所以说找图的底层逻辑,他其实还是找色啊,能不能理解? 好,那我们来看这样一个游戏截图啊,这是一个啊,游戏的背包界面。假如说啊,我想要一次性把我所有这些血瓶呢,把它给依次点击一下, 像这样依次点击一下,我们可以用程序怎么去写了,当然这是只是一张截图啊,这个只是一张截图,所以我们去点他没有任何效果,但是你们可以看到我的鼠标移动轨迹啊,你们可以看到,对吧? 我这个是我手点的,这个是我手点的,我们如果想用程序实验这个效果,把我们这些所有血评依次全部点一遍,怎么去写?我们可以这么去写,首先我们肯定还是要截图 好,截完图以后呢,我们返回抓抓,然后我们把这个血瓶呢框选一下,框选一下啊, 好像这样框选一下,然后位图定成为,我们给它取个名字吧, 叫血瓶。然后呢我们可以考虑一个因素啊,就是我们的血瓶他通常会出现在哪个区域,比如说我们这个截图吧,他通常来说只会出现在这个区域,对不对? 所以说我们去找这个水平的时候,我们有没有必要去全屏去找啊?啊?没有必要啊,没有必要,因为你要找的区域越大, 你的运算效率就越低。所以说我们去找图的时候啊,我们可以尽量的缩小我们的找图范围, 把我们的范围缩小在一个啊,尽可能小的范围内,我们的效率呢就可以更高。所以说我们最好去取一下这两个点的坐标啊,一个是这个点,一个是这个点,然后这个区域范围呢, 我们就可以提高我们的效率,所以我们去看抓抓,在我们的抓抓里面呢,我们把鼠标移动到我们找图区域的左上角,然后我们按一下 ctrl 加一好取一个点,然后再把我们鼠标移动到我们找图区域的右下角, 再按下 ctrl 加按,你看这样我们就取了两个点,对不对?我们把两个点贴过来, 这是第一个点,这是第二个点,那我们就是要在这个范围内去找我们的什么血评, 好,我们可以去仔细一下看看啊 啊,你看他提示找到了,对吧?那没有问题,这说明我们的脚本啊,这个图片他的质量是可以的。那么我们怎么样才能实现依次点击呢?把他们全部点一遍,我们可以去设计这样一个算法啊, 在我们去找到第一个水平之后呢,我们把它的 x 坐标给记录下来,给记录下来,然后我们去找第二个水平的时候呢, 我们去加上啊,我们把找出的范围啊,从第一个水平的 x 开始,加上一个第一个水平的宽度, 加上第一个水平的宽度,这样呢我们就可以从第二个水平的坐标开始找我们,这样呢就可以去忽略掉第一个水平。 所以呢,我们在这里还需要去计算一下我们每个血瓶的宽度,我们可以怎么计算?我们可以用抓抓,我们获取一个血瓶单元格的两个坐标点右边一个点 右下角吧,我们获取他的右下角这个点,取三。好,然后呢获取他左上角的点 取四,我们可以用右下角这个点的 act 坐标啊,减去我们左上角这个点的 act 坐标,这样呢就可以得到啊,得到它的这个宽度啊,得到我们这个血平的宽度, 所以我们在这里呢可以声明一个变量啊,叫雪平的宽度, 那我们顺便就把高度啊,也获取一下,宽度等于多少, 你看这是它第一个点,这是我们取的第二个点,那它的框就是用这个数啊,减去这个数,那高度呢? 就等于五七九,减去五四零啊,这样呢,我们就可以得到一个单元格啊,一个血平单元格的宽度和高度。 那为了我们后面的计算方便啊,我们最好啊,还是要把我们的这个找 图的范围啊,把那个变量化声明一下,我们可以这么写啊,找图范围 x 一 y 一。那这个就是我们找图放我的左上角坐标啊,左上角坐标 x 一个 y 一,然后我们再写一个 x r 和 y。 啊,那这个呢,就是我们找图放我的右下角坐标,我们可以标注一下左上角。 那我们 x 一等于几?等于幺幺九四, y 一等于五二零, x 二等于幺六五三, y 二等于 七七四。那这样呢,我们就可以把后面的这些数据啊,把它用变量给代替过来,这样做的目的是为了方便我们后面计算, 那为了我们后面的计算方便呢,我们最好啊,还是要把我们的这个早读的范围啊,把它给变量化,声明一下, 我们可以这么写啊,找图范围 x 一 y 一。那这个就是我们找图范围的左上角坐标啊,左上角坐标 x 一和 y 一。然后我们再写一个 x r 和 y r, 那这个呢, 就是我们找出范围的右下角坐标,我们可以标注一下左上角。 那我们 x 一等于几?等于幺幺九四, y 等于五二零, x 二等于幺六五三, y 二等于七七四,那这样呢,我们就可以把后面的这些数据啊,把它用变量给代替过来, 这样做的目的是为了方便我们后面计算。 然后呢我们把我们的鼠标找到 以后啊,去移动到我们的这个坐标点,并且我们给他加一个偏移量,他有一个时的偏移量,这样做的目的是让我们的鼠标移动到尽可能靠中间的,靠这个雪冰中间的位置,这样我们看起来就更加明细啊,就更加清楚, 然后我们可以给他一个啊延迟,这个延迟是可以稍微大一点点,然后呢我们去点一下我们的鼠标左键。 好,那如果顺利的话啊,我们的这个程序目前他就会去找这个血瓶, 找到以后呢,我们的鼠标会移过去,然后点一下鼠标左键,因为这个雪屏它的这个图片质量啊,其实还是 有点堪忧啊,而且有点小啊,所以说我们把它的精确度啊,最好改的不要那么高,改到零点八五试试看吧。好,然后我们再启动程序啊,看见没有啊?我们的鼠标是不是 就移过去了,对不对啊?瞬间移过去了,我们可以再试一次啊,大家看见没有啊?很顺利对不对? 好,但是我们没有达到目的啊,他只动了一次,我们,我们的目的是什么?我们的目的是想让我们的鼠标把我们的每个水平都点一遍,对不对?所以说我们找到第一个水平以后呢,我们要去修改我们的查找范围, 我们可以把我们的查找范围加上,加上我们的 一个血瓶的宽度啊,加上我们血瓶的一个宽度,然后呢我们再 go to 我们的标签循环啊,这样呢,我们第二次去找他的时候啊,我们的鼠标他就会 移动到下一个血频,我们可以试试看啊,有没有效果?我们这个弹出来了, ok, 这个能不能不谈呢? 这样就可以了。 好,我们可以发现啊,刚才我们的程序他点了两个血频,但是他没有往后去点, 点第三个,对吧?那我们如果想要我们的鼠标继续往后面点到这第三个瓶子,第四个瓶子,那我们应该怎么办?我们可以设计这样一种算法啊,让我们的这个查找血瓶的 x 递增,递增,一直往后递增, 当它递增到一个临界点的时候,当它递增到一个临界点的时候,我们就让它返回到初始数据, 然后返回到初值数据,他以前初值数据是多少啊?是这个数据是幺幺九四,对吧? 那我们返回初始数据以后呢?让我们的外坐标啊,递增一个单元个高度啊,递增一个水平单元个高度,这样呢,我们就可以从第二行开始去查, 能不能明白,好,我们可以去试试看怎么去写啊?那我们可以粗略的推算一下啊,我们要找这个血拼,我们要找一排的话啊,我们最多需要递增几次啊? 你看他的单元格有几个?一个,两个,三个,四个,五个,六个,七个,八个、九个,那我们递增十次怎么都够了,对吧?我们最多递增十次,他怎么都可以把这一条找完,所以说我们可以怎么样?我们可以写个负循环, 那我们就把这个标签循环啊给删掉啊,我们用个负循环来写 十四,对不对啊?我们是不是找十四,然后 next, 那么这里还是生命的变量啊,循环次数 啊,选完十四就找这个图,我们每找到一次呢,我们的找出范围呢,他就会递增一个血平的宽度啊,那我们的十四找完以后呢,我们的范围怎么样?我们的范围起点 要等于我们的原始数据啊,那这里我们的我们的原始数据啊, 最好还是给他负一个值啊,这生命的变量给他负一个值,像这样写等于原始气垫 x 啊,也是七零 x, 然后呢,我们的角度范围 y 啊,等于多少?等于我们的 y 坐标的原始起点 是五二零啊,五二零加上加上我们一个血瓶的高度, 像这样写,也就是说呢,当我们找完一排图片以后啊,我们的找图范围的起点会回到我们的原点啊,我们找图起点呢? x 坐标,或回到我们的原点 x 坐标。那我们找图器里面的外坐标呢?或回到我们原点啊外坐标,然后加上加上一个血平的高度, 然后我们加上这个高。对,以后呢,我们怎么样?我们再来一遍啊,我们再来一遍,他这样呢,就会去找第二排,我们可以试试看啊,能不能实现我们的目的啊,先找第一排,然后再找第二排, 哎,看见没有,很成功,对吧?好,刚才我发现一个问题啊,就是我们去找水平的时候啊,找第一排的时候很顺利,找第二排的时候也很顺利,但是找第三排的时候啊,就不顺利了。原因在哪里呢?原因在我们的原始坐标 点大概是这个位置啊,我们找到第一瓶水瓶的时候啊,我们要把我们的原始坐标点呢定位到我们的第一个水瓶这里来,这样才可以,要不然的话我们的啊外坐标累加啊, 还有 x 坐标累加很有可能会出现问题啊,很有可能会出现问题,会产生一个误差。所以说呢,我们在第一次循环的时候啊,在第一次找到我们的这个血频的时候, 我们要把我们的啊原始的坐标洗脸值把它重新给复制,你看下这里啊,我加了一个变量啊破循化的次数, 我们这个负循环的次数,在我们的整个负循环每次循环一次的时候呢,他就会加上,一看见没 他就会加上一,然后呢在他为零的时候啊,第一次循环的时候,我们是不是找到这个图片的 x 坐标和 y 坐标,对吧?找到我们血平 x 坐标, y 坐标以后呢, 我们把它给复制给我们的原始系列 y 坐标和 x 坐标,那这样呢,我们才可以去减少他找得这个误差值。 好让我们再来看看啊,把后面的代码一并改一改,看有没有问题啊? 我们先用的复型化,去找图,找一排,对吧?找一排找十次, 摘完以后呢,让我们的整个的这个原始起点呢把它重新给归位,然后这原始起点外坐标呢 给他递增一个,给他递增一个我们的水平高度,然后呢我们再来一次,我们再来一次,然后呢我们的循环再加一, 我们的原始起点外坐标好再递增一次,最后呢我们再加一,再循环,然后呢我们再加一,再循环,把同样代码写四遍, 那你看这样行不行? 哎,没有问题,对吧?好,我们再来演示一遍, 好,看见没有?没有问题,对吧?我们就按顺序把我们的每一个血拼啊,全部点燃一遍。那我们的代码这样写是不是很啰嗦呀?啊?是不是太啰嗦了?是不是 我们这样写同样的代码写了四遍啊?所以说我们可以怎么样?我们完全可以在第一个循环啊,在第一个大的循环里面啊,写一个更大的负循环, 对不对? four 四, 然后呢?把我们整个的这个代码呀,把它套进来,像这样 他就形成了两个复循环的欠套,对不对?外面一个四个啊,循环次数里面呢啊,循环十次,我们每循环完十次呢啊,完成一个小的复循环, 然后呢?外面整体的大的负循环呢啊?循环四次。那这样写的效果呢?和我们刚刚写的效果就是一样的。那我们可以看看是不是一样的 啊?看见没有,对吧?是一样的,对不对?


好,我们现在来看一下条件判断和循环。现在定义一个变量, i 等于零, 然后如果 i 等于零,打印这一行,如果 i 等于一,打印这一行,如果都不等于打印这一行,这就是一个最简单的条件判断,就是 if else 的 一个语句。我们来执行,看一下效果, 可以看到打印结果, 这是第一行的这个打印开始,这个可以忽略,然后我们看 它打印了这一行,现在 i 是 零,所以打印的就是 trace print i 等于零这个条件。我们来重新修改一下 i 值,如果让 i 等于一, 可以看到打印的结果, i 等于一的条件被执行,这输出的是 i 等于一,可以看这里。然后我们再改一下,如果让 i 等于二, 可以看到,也没打印这个,也没打印这个,它是打印的这,这就是一个最简单的条件判断。好,我们再继续往下看这个,把它注置掉, 现在定义这个 i 等于十,然后我们看如果他大于零,可以看到他确实是大于零的,会打印这一行,然后他大于五的话,会打印这一行。我们来看一下执行效果, 这是第十六行打印的啊,这一行被打印,因为 i 确实大于十, i 确实大于零,当前是十大于大于零,所以打印了这个判断条件符合被通过,然后这里条件 i 大 于五, 因为 i 是 十,十确实大于五,所以这行也被输出。我们来改一下,让他,比如说让他等于四, 可以看到它打印了这一行,但是 i 不 大于五,所以直接结束,没有输出这个 i 大 于五的打印内容。 这就是两个最简单的条件判断的一个例子,我们继续往下看循环, 循环的语句就是 for, 然后循环条,循环次数,执行语句 next, 我 们来执行一下, 可以看到打印了一二三,这样吧, 一二三四五六七八九十,打印了十个循环中,最后循环离开,因为这个放十就是执行十次循环,打印十次这个,然后跳出循环 next 的 循环结束,最后打印的是循环离开。 我们十有点多,可能看起来不太方便,我们比如改一下三,看一二三,这就是一个最简单的循环, 我们再改一下,来看另一个例子, 这里可以看到 i 是 定义了一个 i, 让 i 从零到九,然后默认是每次加一, 可以看到 i 的 i 值的变化,它这里设置的是初使 i 等于零,然后一直到九,可以看 i 零,一二三四五六七八,最后到九 过程中每次打印这个循环中加对应的 i 值,最后离开,离开的时候 i 等于九,那十是超过了这个循环,所以没有打印是不会打印这一行内容, 这是 for 的 语句,我们再来看一下 well, well, 也是一个循环,循环的两种,一种是 for 循环,一种是 well 循环。 我们再来先执行,看一下效果,还是 可以看到这里的。开始之后打印了 i 等于一二三四五,为什么指定打印了五行, 可以看这是 four, 现在 i 默认是零,出水是零,它小于十,进来把 i 加一 i, 这是这个时候 i 变成了一 print 第一个行就是打印的一第一次,然后再判断这个 i 是 不是等于五,不等于,所以继续循环, 这个时候 i 是 一,然后再次进来的时候 i 又加一, i 变成二,打印第二行这个,这个 i 等于二,然后它又不等于五,继续 一直到三四五,直到打印完这个五之后,它它已经等于 i 已经变成五,所以准备退出,退出这个循环,就最后是 extra well 函数循环结束,这就是一个 well 循环。条件判断和循环,它主要的用法是在脚本中最常用、最基础的一个语句,一个功能。 那比如上一期直说的执行找图功能,找图片找多少次,你可以一直找,直到找到为止,因为比如有些画面你要等它出现, 它是一个动态的。还有就是循环,比如找多少次,那你第一次没有找到,那你可能是需要判断那个某一个值是不是满足执行什么,满足执行什么操作, 然后执行多少次之后是否退出,还是说一个这块,如果说比如你设也可以设置一个死循环,就一直找所谓的死循环就是 就是这个条件一直不会退出,直到满足一个什么条件才退出。就是比如说这里的你设置足够大,他一直加到某一个,触发他退出的条件才会结束。好,这就是这题的内容。


好,我们今天来接着学习循环呢,我们之前讲了有限循环啊,无限循环,然后我们今天还要讲一种循环啊,叫什么叫条件循环呢啊?条件循环。 什么叫条件循环呢?就是只有当我们满足一个特定的条件的时候, 我们的循环他才会开始,才会开始在不满足这个条件的时候呢,我们的循环他不会开始执行。怎么写呢? 条件循环的关键词啊是 well, well, 当什么时候啊? well, well, 然后我们设定一个条件,比如说我们设定这个变量一, well, 这个变量一等于啊,等于一个数值的时候, 你看这个时候啊,他是一个判断了,他是一个判断。当我们的变量一等于二的时候,然后执行我们这个循环 他是以 well 开头,以问的结尾。你看我们的每种循环他的语法都是不一样的啊, for 循环是以 for 开头啊, elax 的结尾 度循环是以度开头啊,以 love 结尾啊。 well, 循环呢?是以 well 开头,以问的结尾啊,每一种循环它的语法都不一样啊,这个要注意区分,然后我们试试,看 看他会有什么运行结果,我们点调试启动。好,你看我们先执行了一次,对吧?然后又停止了,看见没有,脚本也停止。 为什么他只会执行一次啊?因为我们的条件是什么?我们的条件是当我们的变量一等于二的时候,他才会执行这个循环,对不对?你看, 然后我们的变量它是递增了,对不对?所以当我们的变量进行过一次递增的时候啊,它变成四了, 这个循环条件就不成立了,他就不会执行了。能不能明白?那我们改一改了,比如改为十啊,小于小于十,你看 啊,他怎么会执行几次呢?啊?可以看看他会执行几次啊?好,可以看到啊,十二啊,一次两次三次啊,四次,看见没有? 因为二四六八对吧?都小于十,后面等于十的时候他就不会执行了。他总共执行四次,因为前四次都可以满足这个条件啊,明白吧?这就是条件循环了。

点击抓抓,点击文档,按 ctrl, 加 alt, 加 e, 完成后关闭抓抓工具,然后找到鼠标命令,找到鼠标移动点插入, 在其他命令中插入延迟,在鼠标命令中插入左键,单击 加入无线循环代码,在其他命运中输入文字,输完完成。点插入,插入延迟,找到键盘命令,按下回车点插入,调试一下看看效果吧。 是不是很好玩呢?通过这个可以举一反三哦,点击发布就可以生成软件了。

嗯,上节课呢,我给大家讲了一下,就是早色多点早色的用法啊,这节课给大家就是说一下循环, 就比较常用的两个循环,一个是 fo 循环,一个是度循环。 嗯,同样呢,我们交流群是六三五七八七四零三,如果在学习过程中有什么疑问的话,可以去群里面,嗯,提问,然后或者直接艾特我,我看到后看到的话也会就是回回复你的。嗯 啊,接下来呢,我们就先讲一下这两个命令啊,就这两个循环命令,其实还有一个循环,就是弯循环那个 啊,用的不多,就是就是,我们就讲一下常用的这个吧。 来,首先我们就是把我们上节课学的那那些内容先屏蔽掉,我们单独先把循环讲一下啊。第一个我们先讲一下这个佛循环,佛循环他是什么意思呢?循环一定次数啊,我们看一下他有个参数啊, 参数的话就是后面加一个次数,就是我们加多少他就循环多少次,对不对? 然后我们举个例子吧,哎,我们在这里反正我们命令的话不用记那么全,只要记住前面两个就好了。然后按一下回车, 按下回车,我们看一下啊,他有一个,哎,使用方法看到没有一个 fo 循环次数, 循环次数,嗯,假如说我们循环五次吧,然后我们这这个时候只要按一下回车,他这个结尾就自动加上了, 非常的方便啊。然后我们上节课有说这个输出,就是脚本告诉我们的话,就我在运行, 对,我们调试输出看一下啊,哎,他说了几次呢?一二三四 五,他说了五次,我在运行,那为什么说了五次?因为我们让他循环了五次, 哎,假如说没有这个放循环,哎,我们把它屏蔽掉,如果我们要执行五次,就是让脚本跟我们说五句,我在运行,那怎么办呢?那只能复制粘贴,对不对? 哎?我们粘贴一个两次,三次,四次,五次,这样的话就比较麻烦了。 为什么麻烦呢?因为我们五次啊,虽然少,假如说我们要让他跟我们说五百次呢? 我们总不能复制五百次吧,对不对啊?这样的话他也可以一二三四五也是五次。 所以说这个比较麻烦的方法,我们就不要用它啊,就我们就用这个循环来让它啊自己运行, 这样我们只要啊打一行代码就可以了,对不对?要不然我们还要复制那么多次, 这个是次数循环啊。嗯,还有一个度循环,我们同样也按一下回车。哎,我们输出一下,我在运行 啊,加我们加一个言词吧,我就怕他卡住了,因为他这个循环是无限循环,他抑制 在循环的, 只要我们不停,他就一直在循环。那我们看一下, 你看我在运行,我在运行,我在运行。他一直在一直在运行,一直在运行。只要我们不按这个啊,停止不按这个暂停啊,终止,他就一直在循环,一直在循环, 直到天荒地老,海枯石烂。他啊,这里我们看一下,你看他有这么多,直到我们按了停止,他才停下来 度循环呢,你看呢?他说了无限循环啊,也可以是有限循 循环,那为什么说也可以可以是有限循环呢?就我们给他加一个条件,让让他跳出这个循环啊,比如说我们在这里啊, 看到没有?这个, 这个意思是退出啊,就是我们要退出,呃,各种东西啊,就首先要打这个看看,第一个他是退出度循环, 然后第二个呢是退出 fo 循环,就是说假如说这个次数没有到就,嗯,然后或者条件成立了,我们就让他退出这个循环,就不让他再继续执行下去了, 那我们选择第一个退出度循环,那 他现在的话,假如说,哎,执行到这里第一次,然后到这里直接就退出来了,那他这个循环还有用吗?那肯定是没有用的了,对不对?我们调试一下, 哎,他只运行了一次就退出来了,对不对?他只需运行了一次,那他这个退出循环的代码呢?他就是前面的东西啊,都可以运行, 他后面的东西他就不运行了。那比如说我们加一个东西啊,加一二啊,就几个啊,就几个一,好了,我们看一下啊, 哎,他只有前面的运行了,后面的没有运行,对不对?假如说我们把这个 就是我们这个,他不是,不是,我们输入代码有个光标一闪一闪的吗?这个假如没有的话就消失了,他可能卡住了,我们按一下普通再点回来,点到原文件这里他就有了 啊。我们把这个退出循环拉到最底下,然后我我们看一下他这个运不运行,那我们调试一下, 哎,他运行了,对不对?他运行了,他运行完这个再退出度循环, 所以说呢,嗯,这个我们可以加一个条件啊。上回我们有简单的说一下,我们变量要定义,假如说我们弄一个变量叫什么呢? 叫 就叫爱吧。嗯,我们用英,用中文好了。啊, 数字,哎,我们定义一个变量叫数字,那我们让这个变量等于多少呢?数字等于零,就我们先让他等于零,然后这个数字他就等,他就是零,他代表的就是这个零。 um。 对,我们在这里加一个条件啊,就是如果啊,上货,我我们也说过啊,这个 如果,如果条件成立,那我们加一个什么条件呢?数字大于五折 执行什么呢?执行我们退出这个循环的代码,就如果数字大于五,我们就退出这个循环,对不对?那他这个数字现在是多少?他数字 这个变量的话,我们是可以输出的,直接输出就是输出后面直接打这个变量名,数字看到没有?直接这样输出, 我们后边先不动啊, 看到没有?他输出的这个变量 数字,这个变量他就等于零,因为因为我们让他等于零了,对不对?他数字等于零了,然后我们输出这个数字,他这个数字他就是零。嗯,我们在这个循环里面呢, 我们加一个数字等于数字。 加一这句话是什么意思啊?就是他每运运行一次,哎,他从这里运行一次,然后到这里他这个数字在他自己本身的情况下再加上一, 哎,他第一次是零,对不对?数字他是个零,然后让他等于零,加上一,那这个数字等于 多少了?那肯肯定是一了,对不对?我们先输出一下 数字,然后我们把这个判断放到这个输出的后面,这样方便我们 预览啊,就是我们输出这个数字等于多少,然后他这里再判断一下,然后我们看一下啊, 哎,他停了, 看到没有?他第一次啊,他这个数字是零,然后他第一次运行,我在运行,然后到这里数字零 等于零,加一,那数字就变成了一,他输出的是一,对不对?他现在我们判断一下,如数字是不是大于五呢?啊?因为他数字是一, 他不大于五,他就不退出,然后所以说呢,他又从头运行到这里,又从头运行,然后他数字就等于多少了,一等于一加一, 一加一等于多少等于二,然后他自身就变成了二,二也不大于五,然后一直加,一直加,然后加到加到六, 看到没有?这里第五次的话等于五,加一等于六,数字等于六了, 然后这里他就条件成立了,对不对?数字大于五了,大于五了,他就退出循环,然后我们就退出来了,他这个就不再是无限循环了,因为我们给他加了一个条件, 这是退出循环的度,循环,退出循环的方法啊,就我们给他加一个条件啊,条件成立了,我们就退出循环。 那腹部循环呢? 放循环。假如说我们放循环,我们运行 多少次呢?啊?我们直接在这里啊,把它拖过来, 取消这个注视啊。我们假如说我们运行九百九十九次, 然后我们这里也加一个条件啊,数字等于数,数字等于数字加一,我们也加一个条件,假如说什么呢? 如果数字等于五,就让他退出。退出什么?退出?我们这个是负循环,对不对? 如果我们不加这个条件,他肯定是要运行九百九十九次的,对不对?现在我们加了这个条件了,当他等于五的时候 就退出这个循环啊?我们调试一下,看一下啊,看到没有?一二三四五他只运行了五次,他就退出来了。哎,这个是负循环提前退出的 啊,一样跟度循环是一样的,就是我们也是加一个条件,条件成立我们就退出,对不对?这是退出循环的方法, 两个,一个多循环,一个否循环。 那怎么把这个循环就是结合到我们上一次讲的这个?我们找那个滑动,哎,我们滑了 来是划一次对不对?划一次找不到,那怎么再给他再划一次呢?所以说我们现在就用到这个复循环了,来,我们到这啊,这个是我们之前的代码,我们怎么加呢? 我们现在不用次数了,因为我们条件是什么?哎,找到了并点进去了 再退出循环,我们可以用 fall, 也可以用度,对不对? fall 的话我们 给他加一个九次 回车,然后我们。

好,我们今天来把前面学的那些知识啊,做一个啊整合式的应用,我们尽量把以前学的知识点都把它给在一个啊程序里面,把它给整体的应用一次, 那我们来用一个什么方式来进行应用呢?我们来让我们的程序啊,自动的帮我们画一个网格 啊,差不多就是这个意思啊,画几条横线,画几条,对吧?竖线差不多就这个意思啊,那我们怎么去实现这个功能啊?让我们的程序自动去画, 我们来按照我们的逻辑思维啊,一步一步的往下 走,首先我们要画这个线的话,我们先要找一个什么?找一个起点,找一个起点开始落笔,对不对啊?不管我们啊怎么画,我们肯定需要有一个起点,先落笔第一个点,然后横向也好,或者纵向也好, 总之这是我们起点,那我们就要在程序里面呢啊,定一个起点啊,定一个起点,我们的起点有 x 坐标,对吧?还有什么?还有 y 坐标, 那我们给他一个值啊,我们给他一个值,我们就出钱了啊,随便写一下吧,这里也不用写的太过于精密啊,因为无所谓嘛,我们写一个啊,三百, 四百。然后我们鼠标首先要怎么样?首先要移动到这个点,然后点击按下播放啊,按下播放 mouse down, 然后呢进行一个移动, mouse, move, 最后怎么样?最后放开啊, mouse up, 好,所以我们如果要画一条直线,我们应该怎么画? move to 对吧? move to 起点 啊,然后 left it down 啊, left it down, 这次按一下鼠标左键 的意思,然后怎么样?然后再摸不出,摸不出我们的终点,这个时候我们就要看了啊,我们要画一个横线的画,我们要画一个横线,他是我们的 x 轴递增啊,他是我们 x 轴递增, 所以我们要画一条横线,我们的起点和终点呢?他之间只需要递增我们的 x 坐标啊,只需要递增我们的 x 轴坐标。外轴坐标呢?可以不用动啊?可以不用变。 那比如说我们这条线,我们先把它画啊,三百个像素的长度,我们就可以这么写,加三百,然后呢? y, 对吧?然后再把鼠标弹起来,弹起来, 是啊, left, it up, 对不对?这样我们就可以画一条直线,一条横线啊,应该说是一条横线, 那我们来试试看啊,我们把画布给删掉啊,然后我们来启动程序啊,看见没有?我们画一条横线,对吧?但这个横线比较短呢?我们可不可以把它延长啊?可以延长, 那为了灵活起见,我们可以怎么样?我们可以定一个参数啊,定一个变量, 比如说变量名字叫什么?叫宽度,对不对?叫宽度。我们把宽度设为多少?设为一千,设为一千。 你看这样我们就可以画一条一千、一千宽度的横线, 但是我们画图失败了,对吧?你看他只画了一个点,为什么?因为我们程序这里太快了啊,太快了。我们直接移动啊,点击,然后又移动,又点击,这个中间没有没有间隔,没有间隔。 这两步没有间隔,我们程序还可以反应的过来啊,后面这两步没有间隔的话,如果你的宽度太宽了,他可能反应不过来。所以我们怎么样?我们可以给他加个延迟 delete, 比如说啊,三百,三百毫秒, 三分之一秒啊,差不多是三分之一秒,然后我们再来试试啊,看见没有?这样我们就可以画一条横线了。 好,那么我们画竖线怎么画啊?画竖线很简单的,这样画 我们还是先移动到起点,对吧?然后我们的 x 轴不变,我们的 y 轴坐标怎么样?递增啊?递增 那重轴的我们就不叫宽度了,叫什么?叫高度对不对?比如说我们高度设为八百,你看这样可不可以? 我们可以试试看了啊,看见没有?这样就画出来一条竖线,但是我们看这个竖线他画出去了,对不对?那为了便于观察,我们可以怎么样?我们可以调整我们的起点坐标,可以把它往上挪一点啊,挪到这里来, 所以我们就把这个外坐标啊来改小一点,改为一百五。我们再来试试看啊,先把画面全部给删掉啊? 啊?没有选工具啊?看见没有?我们这样就画出了一横一竖。我们之前讲过啊,重复利用的数字,我们最好怎么样?最好给它设置一个参数啊, 就是变量,我们把延迟参数了作为一个变量来声明一下,然后给它复制,复制为三百,或者我们还可以更短一点。一百。 好,我们这一块就是什么?就是画横线的,我们这一块就是画竖线的,但是我们要画一个网格的话,我们要很多条横线,然后很多条竖线,对不对?一条两条肯定不够,对不对?那怎么办? 我们可以应用我们之前学的知识,数组对不对啊?我们之前学过数组,这里数组的应用啊,并不是必须的啊。 啊,不是说我们要实现这个目的啊,并不是说一定要用数组,你也可以不用数组,不过我为了把之前的知识啊,把它串联在一起,加深你们的印象,所以我在这里还是用数组。 那我们在这里声明一个动态数组吧,动态数组 网格啊,横坐标竖住啊 x, 那我们画一个网格,比如说我们画一个二乘以二的网格,像这样,这是一个二乘以二的网格,这个田字形,对吧?我们画这样一个网格,我们的 横线需要几条?他是一个二乘以二的网格,但是我们横线要几条?要三条,对不对啊?要三条,我们重线呢,也是一样三条,对吧?所以我们的线条数量他是比我们的网格数啊要大一点的,对吧?大一啊, 那我们可以这样再声明一个,变量是什么?是我们的横向网格竖,对不对?横向网格竖, 我们假如把它定为五百的话,因为我们的宽度是一千嘛,对吧?我们可以怎么样?二十个像素画一条竖线对不对啊?不过这样可能太密集了,我们稍微改的 啊,不乱密集一点。好吧,改为四百个。让我们横坐标数组的下标最大值啊,就是我们的横向网格数,就这个数,然后我们来给我们的这个数组来复制。 用什么来复制呢?用负循环,循环次数等于我们的下标,下标上线加上一啊,加上一, 然后我们把我们的这个坐标值把它给赋给我们的每一个数组元素, 所以我们在这里还有一个,还有一个参数,还有个什么参数? 还需要我们的一个数组的锁引啊, 这个参数的名字有点长啊,是为了便于你们理解它的含义啊,所以我写的比较长, 我们在这个负循环里面让这个锁引让他递增,让他递增,这样我们才可以便利我们的宿主,对不对? 然后我用我们的数组名加上我们的数组锁引, 这样看起来有点累,对吧?太长了啊,我们来改短一点吧,太长了 容易混淆啊,容易混淆,像这样写,你们可能跟 容易理解一点啊,看得更清楚一点,那这个数组它的第一个值就应该是什么?就应该是我们的坐标起点的 x 值啊, 所以它第一个值应该是起点三百啊,是这个值 然后递增,对不对?我们要往后递增嘛?第二个值呢?就在这里,对吧?第三个值在这里,它是一个有规律的递增, 对吧?这是我们的 x 轴,嗯,它每个点的位置,让我们的这个锁引值 他也在递增,对不对?你看他也在递增,所以我们可以用这个缩影字去乘以,乘以一个 单元格的宽度,这个单元格的宽度我们可以怎么算?我们可以用 宽度除以啊,除以什么?除以我们的网额数啊,能不能理解?这是一个数学运算啊,你们要去想一想啊。 然后我们的横向网格竖啊,它是用来画什么线的?它是用来画竖线的啊,一定要理解啊,我们横向的网格竖,它影响的是我们的竖线,比如说这里啊, 啊,你看我们的横向网格数,如果有三个格子的话,一、二、三,对不对?那我们的竖线是四条,你看见没有?我们的 横向网格竖,它是影响我们画竖线的,我们的纵向网格竖啊,我们纵向网格你看只有两个,那我们的纵向,那我们的横线啊,就是一二三三条,看见没有?我们的横向网格竖,它影响我们画竖线,我们的纵向网格竖,它决定我们啊画横线。 所以说我们后面应该怎么去用这个数组啊?我们不是在这一块用啊,这一块是画横线的,对不对?我们后面这一块是画竖线的,那我们就要去改后面这一块带嘛,他还是 for 循环啊,还是 for 循环? 然后我们要怎么去 move 了啊?怎么去 move 处啊?在这里啊, 我们要把这个起点不断的递增,对吧?不断的递增,我们前面已经把这个坐标点全部给他 复制到我们的数组里面去了,所以这个递增我们直接去引用它就可以了,直接去调用这个数组里面的参数 啊,像这么写就可以了,这是我们起点,那我们的终点是不是也要递增,对吧?我们也要递增, 那这个锁引呢?我们需要把它归零啊,前面因为我们让他累加了,对不对?他一直累加,这个时候我们的程序跑下面来的时候,这个锁引他已经不等于零了啊,他等于我们的数组的下标值的上限啊,还要 加上一。所以我们要怎么样?我们要把它归零, 然后这里呢?在循环里面让他递增,这样我们就可以实现。什么实现?让我们的程序一条一条去画我们的竖线,我们可以去看看效果啊, 我们先删掉再来画图 啊,看见没有?我们先画一条横线啊,然后再画竖线,但这个竖线太密集了啊,对吧?太密集了,我们的空隙太小了, 我们现在就看不出这个网格了,对不对?但我们的逻辑没有错,是吧?我们逻辑没有错。好,我们把程序停掉啊,停掉 今天,然后我们去改一下参数啊,四百,这个网格数啊,太夸张了啊,太夸张了,我们写二十个算了啊,少写一点参数,我们也稍微改大一点啊,然后我们再来看看。 好,我们再来使用程序啊,看见没有?他现在就可以按照我们的意图啊去画这个竖线了,那是不是那横线怎么画啊?一葫芦画瓢,对吧?一葫芦画瓢,我们把这个 竖线的逻辑啊,把它套用到横线上面去就可以了。这块代码你看,我们再重新给一葫芦画漂照了,抄一遍啊,稍微改一改就行了。 那这里就是什么纵向网格术啊,纵向网格术 总像网格数,比如说我们定位多少,我们定位二十五啊,随便写一个数字啊,定为二十五, 然后我们在这里用复循环去给我们的纵向网格去复制, 然后把我们的这个这个坐标啊,把它改为一个 y, y 坐标所组,这里数组所引呢,我们需要把它重置 一下啊,重置一下,因为在这里他已经累加了,他已经不等于零了,我们在这个负循环开始之前呢,我们需要把它重置为零, 然后气垫 y 啊,上面是气垫 y, 那这里就要用气垫,什么气垫上面?气垫 x, 这里就要用气垫 y 加上 缩影乘以我们的高度啊,把它改为高度,然后除以。什么?除以我们的纵向网格数啊,这是我们的纵向网格数坐标它的数组, 这样就复制完毕了,然后去改我们的纵向线的画法。也是一样啊,一葫芦画漂,我们可以 整个把它复制,然后在这里写我们的纵向网格数加一,然后这里我们递增的是 y 坐标啊,我们 x 坐标啊,怎么样?我们 x 坐标不变, x 手表,还是按照我们以前的逻辑来。 那我们的 y 坐标呢? y 坐标就是我们的数字坐标,把改为 y 就行了 啊,这样我们就可以去实现我们的横向,纵向都用竖柱啊,把它画出来 可以看下效果啊,先把它都删掉吧,然后去启动程序。好,你看哦,他有的时候线还是错乱了啊,为什么?因为我们的延迟还是太太快了, 这个三百三十三都还是太快了, 倒不是说我们代码反应不过来啊,是我们的这个 photoshop 啊,这个软件它的响应速度没有那么快。 嗯,五百五十五,这还是太快了,他的响应速度实在太慢了啊, 好,我们发现两个问 题啊,一个是他的横线啊,他的横线,因为他的横线比他的竖线长啊,所以我们的程序响应时间需要更长一点。那我们的参数可以做一个差异化的配置啊,可以做一个差异化的配置处理。 然后呢,我们的横线,你看下面没有画了,对不对啊?为什么啊?我们要看代码哪里错了,我们可以看到这里,你看这个参数啊,就有问题, 他的这个数量啊,不对啊,不对,这个下标纸上线不是横向网格数,是纵向网格数,刚才我们复制的时候啊,没有去注意到。好,然后我们把它改过来,然后我们的参数, 我们的竖线啊,由于他比较短,所以他的这个响应速度可以稍微快一点啊,对吧? 稍微快点,但是我们的横线由于他比较长,我们的软件响应速度他没有这么快啊,没有这么快,那怎么办? 所以我们在这里呢,可以对着这个参数啊做一个处理啊,差异化处理,我们把它乘以三,这样我们延迟的时间就会更长,对不对? 那稳妥起见了,我们还是把上面的延迟啊,改的稍微大一点点啊,稍微大一点点, 然后我们最好在每一次画完线之后啊,让他停顿一下啊,让他停顿一下, 然后我们把这个参数改稍微小一点啊,没有必要花那么多,太密集了,对吧?太密集了, 好,我们再来看效果, 先画横线,对吧?先画横线, 然后画竖线,看见没有? 好看见没有,这样我们就可以画出一个啊,用程序画出来的网格。 那我们再尝试一下看看啊,把它做一个 shell 上的优化,然后我们看看把这个参数改一改啊,随便改, 看看还能不能生效啊,改为技术也可以啊,这个无所谓啊,你不要怕他整出不进啊,整出不进没有关系,因为我们后面在每个循环的后面啊,在每次循环的后面 他都加了延迟,所以我们这里可以把参数改的稍微小一点,试试看看这样行不行。然后我们把网格那网格数量都改为基数,这样他无法整出,对吧?这样会不会影响我们的效果?我们可以看看组个实验看看 啊,我们可以看到完全没有问题,对吧?完全没有问题。好,那我们再啊,再极限一点啊,比如说我们改为二十啊,我们改为十九,改为十七。好,我们再试试看啊, 看这样有没有问题啊?没有问题,看见没有?非常的高效,对不对?