第二课:基础教程

神奇的官方例子是如何做到的呢?让我们来一探究竟,打开脚本源文件视图:

KeyPress "Home"
Delay 2000
Dim screenX,screenY,deviceID,colorDep,shijian
screenX = GetScreenX()
screenY = GetScreenY()
colorDep = GetScreenColorDep()
deviceID = GetDeviceID()
shijian=Now()
Call 信息提示("手机分辨率是:" & screenX & "*" & screenY & Chr(10) & "手机色深是:" & colorDep & "位" & Chr(10) & "手机IMEI号是:" & deviceID & Chr(10) & "当前时间是是:" & shijian)
Delay 1000
//--------------------------------------------------------------------------------------------
Call 信息提示("自动滑动演示")
Swipe screenX/2, screenY/2, 0, screenY/2
Delay 500
Swipe screenX/2, screenY/2, screenX, screenY/2
Delay 500
Swipe screenX/2, 1, screenX/2, screenY
Delay 500
//--------------------------------------------------------------------------------------------
Call 信息提示("按下HOME键")
KeyPress "Home"
Delay 2000
//--------------------------------------------------------------------------------------------
Call 信息提示("震两秒试试?")
Vibrate 2000
Delay 1000
//--------------------------------------------------------------------------------------------
Call 信息提示("音量调节释放")
For 3
KeyPress "VolUp"
Delay 200
next
For 3
KeyPress "VolDown"
Delay 200
next
Delay 2000
//--------------------------------------------------------------------------------------------
Call 信息提示("试试看拨打电话")
Phone.Dial (10086) //不会拨打,只是输入电话号码(拨打:Phone.DialOut 10086)
Delay 1500
KeyPress "home"
Delay 1000
//--------------------------------------------------------------------------------------------
Call 信息提示("试试看发给移动查话费")
Phone.Message 10086, "11"
//--------------------------------------------------------------------------------------------
Call 信息提示("最后去按键移动版官网看看吧~")
Delay 1000
RunApp "com.android.quicksearchbox"
Delay 2000
InputText "m.anjian.com"
Delay 100
KeyPress "Enter"
Delay 2000
//--------------------------------------------------------------------------------------------
Sub 信息提示(内容)
TracePrint 内容
ShowMessage 内容
Delay 1500
End Sub

可以看到,源码并不复杂,简约的60多行,就能达到效果,你写的时候也会是这样的!简约而不简单。现在进入源码的世界吧。

1.基础中的基础----关键字与变量

关键字是按键里已经定义好的一些含有独特功能的标识符(暂时可以理解为命令),这些命令可以直接使用,不需要你再去定义它。举个栗子(例子?),我们想要显示一句话,于是这么写:



调试运行后得到:



显示一句话的说法如此之多,计算机不可能全部认到,因此我们需要一些约定好的说法(命令)。

变量是用来存放用户自定义的数据,在脚本执行过程中可以自己去变化他,变量使用Dim关键字进行标识,如下图,名字就是变量,脚本过程中可以赋值为小明,也可以赋值成小红,用”=”符号进行赋值。

Dim 分数
分数 = 1
Dim 名字 = "编程达人"

变量与标识符一样要以字母或者汉字开头。



明白了关键字与变量后,我们再来看看官方例子的源码,其中蓝色部分都是按键精灵定义好的命令(他是蓝色的,再也不担心自己写的标识符和按键定义好的重复了!)



(PS:同时定义多个用逗号分隔)

2.运算符

1)算术运算符:算术运算符是用来进行基本的数据计算的,和数学中的算术运算基本一致,包括优先级等等。(小学数学有木有,学起来!)常见的有+、-、*、/,也就是加减乘除(记住吧),还有一些比较少用到的,比如求余的运算符mod等等(知道有即可,需要用再去找)。

2)关系运算符:关系运算符是用来比较两个数,确定两个数关系的。关系表达式返回的是一个布尔型(True或False,也就是真或假),比如1>2,这个是不成立的,因此他返回的结果是False。常见的有=、>、<、>=、<=、<>,都很好理解,功能分别是等于、大于、小于、大于或等于、小于或等于、不等于。关系运算符常常和判断语句一起使用。

3)逻辑运算符:关系表达式只能判断一次,而实际上我们经常需要多个条件判断,比如“我要寻找一个上衣穿黑色,并且手里提着笔记本的人”。这时候就需要用逻辑表达式来同时进行2次判定。常见的有And、Or、Not等等,两个条件要同时成立就用And连接两个判断语句,两个条件只需要一个成立就用Or连接两个判断语句。



3.Delay

官方例子的脚本中,我们看到最多的就是Delay,他的意思是延时,我们做的任何操作,都是在时间轴上的,第一秒做了什么,第二秒又做了什么,在代码中,就是用延时来给手机反应的时间,Delay后面的参数为时间,单位为毫秒,即Delay 1000,是为延时1000毫秒(也就是1秒)的意思。

Delay 1000 //延时1000毫秒,也就是1秒再往下执行

4.Tap和Touch之间的故事(哦,忘了还有你---KeyPress)

游戏或者应用中,最基础的操作方式就是点击,我们来研究一下一个点击操作究竟有哪些步骤:

1) 触摸屏幕中的一个位置

2)经过一小段时间的延时

3)放手

用代码表示即为:

TouchDown x,y,1 //x,y为坐标,也就是点击屏幕的位置
Delay 50
TouchUp 1

一个点击操作就需要如此麻烦,那有木有更简单的办法呢?答案是有的,我们可以用Tap x,y 来代替上面的三行代码,除了不适合用在多点操作以外,其他功能是一样的(其实就是用Touch封装的)。
x与y为坐标,那么问题来了,挖。。。咳咳,手机游戏有的是横屏,有的是竖屏,我们要怎么确定这个坐标呢?为了防止混乱,我们强制使用竖屏时候的左上角作为坐标系的起点,让我们来看看图就明白:



手机的屏幕显示的内容都是由一个个像素点组成的,如果不明白,可以百度自己的手机型号,查找到分辨率这一项属性(安卓不像windows分辨率可调整)。

噢,别忘了还有KeyPress,作为PC端最常见的输入手段,在安卓中也是有的,常用的安卓三键(主菜单,主页,返回)就是使用KeyPress来点击。分别为:

KeyPress "Menu"
KeyPress "Home"
KeyPress "Back"

当然你并不需要特地去背下来,还记得我们手机助手的快捷命令区吗?
5.又一个故事----这次是ShowMessage和TracePrint

官方例子中,我们除了看到各种操作外,还看到了每一个操作附带的提示信息,这种短暂的提示,对于使用者来说相当友好,也方便自己开发时用来显示调试内容(温馨提示:两个ShowMessage之间最好要有1秒以上的时间间隔哦,否则第二个ShowMessage会遮住第一个的)。当然,如果用来做调试,ShowMessage并不是一个好选择,我们来看看他的兄弟----TracePrint。作为开发脚本的作者,游戏中的逻辑相当之多,一旦代码量上来了,运行的时候就需要在各种分支或者操作加上TracePrint的调试信息,方便我们知道脚本”跑”到哪了。

KeyPress "Menu"
TracePrint "点击了菜单键"
KeyPress "Home"
TracePrint "点击了主界面键"
KeyPress "Back"
TracePrint "点击了返回键"

上述代码,如果我们发现调试信息只到”我点击了HOME键“,那么很快就可以定位到错误的地方。(当然,以下脚本并没有问题)我们讲了输出自己写好的调试信息,但是在很多情况下并不友好,比如我在一个循环内想输出循环的次数,固定的输出信息并不能满足我(难道要一条一条去数吗),那么,我们可以在输入信息中加入自定义的变量,然后就可以在输出里面看到调试的信息,是不是很方便呢!(循环之后会讲哦)

Dim 循环次数 = 0
Do
Delay 1000
循环次数 = 循环次数+1
TracePrint “循环次数:”&循环次数&“次”
Loop

6.动一动----Swipe(没错,”他”和Touch也有关系)

又一个游戏或者应用中常出现的操作----划屏,简单粗暴的使用Swipe进行吧。
Swipe 10,10,100,100,300 //从坐标10,10划动到坐标100,100,历时300毫秒

然而很多情况下,我们希望能够长按一段时间再进行移动(比如拖动软件位置时),又或者希望能滑动后停顿一段时间再抬起,防止列表由于惯性又滑动了一段距离(很多游戏都这样!),Swipe并不适合这种情况,那么问题来了,挖掘机。。。(你够了!)我们需要使用Touch命令来解决这个问题,直接贴代码:
TouchDown 10, 10, 1
Delay 1000
TouchMove 100, 100, 1, 300
Delay 1000
TouchUp 1

我们在点击后延时1秒进行移动,经过300毫秒移动完毕后等待了1秒才抬起。一个简单的滑动居然需要5行,要是需要使用的地方一多,岂不是很麻烦,我想要一行就搞定行吗?当然没问题,继续贴代码:
SwipeByDzc 10, 10, 100, 100, 1000, 1000, 300

这么写的话。。。。运行的时候会报错(你丫的),当然还没结束,我们需要在脚本的其他地方加上:

Function SwipeByDzc(StartX, startY, EndX, EndY, LastTime1, LastTime2, MoveTime)
TouchDown StartX, StartY, 1
Delay LastTime1
TouchMove EndX, EndY, 1, MoveTime
Delay LastTime2
TouchUp 1
End Function

于是就可以使用了,这个属于函数的用法,这里先不用关心,以后的课程我们会说到的!

最后有人疑问了,我们不是纯手机写脚本么,怎么用pc助手讲课程呢?
首先我们得明确,无论是手机上还是电脑上,安卓的脚本语法是一直的,PC能直观的调试输出信息,对于讲课比较直观,手机也不是能输出调试信息,只是多点步骤。另外,这里我比较懒,我是直接整理按键的教程的,这并不是我的原创教程!
所以我们只要看懂了上面说的内容,自然手机上写起来也不是问题了,这个灵活点运用!