GlovePIE脚本语言文档的中文翻译

这大约是我2011年发布的,再贴这儿

文内符号说明:“[]”内是可用可不用的项,“|”两边是单选项。

注释可以为以下几种

// 注释

' 注释

REM 注释

% 注释

/* 多行

注释 */

建议用“//”

debug=变量

就能在调试窗口实时显示变量值

---------------------------------------

赋值语句

有向前赋值和向后赋值两种形式,等价的。

向前赋值语句如下

变量名  = 表达式 [;]

变量名 := 表达式 [;]

向后赋值语句如下

表达式 => 变量名 [;]

例如

Ctrl = var.a

Ctrl = var.b

它有类似的效果:  Ctrl = var.a or var.b

------------------------------------------

IF语句

有以下句法

if 条件 then 语句 [;]

if (条件) [then] 语句 [;]

if 条件 [then] [begin] [{]

  语句 [;]

  语句 [;]

  ...

[}] [end [if]] [;]

if 条件 [then] [begin] [{]

  语句 [;]

  语句 [;]

  ...

[}] [end] else [begin] [{]

  语句 [;]

  语句 [;]

  ...

[}] [end [if]] [;]

if 条件 [then] [begin] [{]

  语句 [;]

  语句 [;]

  ...

[}] [end] (else if|elseif) 条件2 [then] [begin] [{]

  语句 [;]

  语句 [;]

  ...

[}] [end] (else if|elseif) 条件3 [then] [begin] [{]

  语句 [;]

  语句 [;]

  ...

[}] [end] else [begin] [{]

  语句 [;]

  语句 [;]

  ...

[}] [end [if]] [;]

--------------------------------------------

WHILE循环语句

当条件为真则循环

有以下句法

while 条件 do 语句 [;]

while (条件) [do] 语句 [;]

while 条件 [do] [begin] [{]

  语句 [;]

  语句 [;]

  ...

[}] [end [while]] [;]

任何循环最多只运行0.2秒,超过就强制中止。

--------------------------------------------

FOR循环语句

有以下句法

for 变量 (=|:=) 初始量 (to|downto) 结束量 [step 步长] do 语句 [;]

for 变量 (=|:=) 初始量 (to|downto) 结束量 [step 步长] [do] [begin] [{]

  语句 [;]

  语句 [;]

  ...

[}] [end [for]]

for (赋初值 ; 条件 ; 增量) [do] 语句 [;]

for (赋初值 ; 条件 ; 增量) [do] [begin] [{]

  语句 [;]

  语句 [;]

  ...

[}] [end [for]]

任何循环最多只运行0.2秒,超过就强制中止。

--------------------------------------------

等待命令

有以下句法

wait 持续时间 [;]

wait(持续时间) [;]

通常为持续时间指定单位。有效的单位是:ms, s, minutes, hours, days

--------------------------------------------

增减语句

有以下句法

var.x++

++var.x

Inc(var.x)

var.x--

--var.x

Dec(var.x)

--------------------------------------------

位移语句

有以下句法

左移变量N位

shl var.x, N

右移变量N位

shr var.x, N

--------------------------------------------

“说”命令

Say "句子"

Say("句子")

发出合成语音

--------------------------------------------

其他命令

ExitScript

退出当前脚本运行

ExitPIE

退出GlovePIE软件

FlashPieWindow

闪GlovePIE的窗口

HidePie

隐藏GlovePIE

ShowPie

显示GlovePIE

RestorePie

复位GlovePIE的窗口

MinimizePie

最小化GlovePIE的窗口

MaximizePie

最大化GlovePIE的窗口

UnMinimizePie

反最小化GlovePIE的窗口

UnMaximizePie

反最大化GlovePIE的窗口

Execute(文件名)

执行外部程序

Chain(文件名)

调用运行另一脚本

PlaySound(文件名)

播放音频文件

Beep([频率, 持续时间])

响单频率声

BeepAsterisk

响*音效

BeepExclamation

响!音效

BeepHand

响!音效

BeepQuestion

响?音效BeepDefault

响缺省音效

Display(text)

输出信息

DebugPrint(text)

调试窗口输出信息

OutputToFile(text)

输出信息到文件里

AddCode(text)

不知道

Type(字符串)

模拟键盘打入字符串

TypeUnicode(字符串)

模拟键盘打入Unicode字符串

Press(键)

按下键

Release(键)

释放键

Toggle(键)

如果键当前是按下状态,则释放键,如果键当前是释放状态,则按下键。

SendOsc(ip, port, address, [p1, p2, p3…])

BroadcastOsc(port, address, [p1, p2, p3…])

这两个是网络发送信息的函数

ControlPanel, ControlPanelKeyboard, ControlPanelJoystick, ControlPanelMouse, ControlPanelP5, ControlPanelPPJoy, ControlPanelSpeech, ControlPanelMidi, ControlPanelDisplay这些都是打开各个设备的控制面板。

================================================================

GlovePIE内置函数

三角函数

单位是度

Standard trig functions: sin(x), cos(x), tan(x), sec(x), cosec(x), cotan(x)

Hyperbolic trig functions: SinH(x), CosH(x), TanH(x), SecH(x), CosecH(x), CotH(x)

Inverse trig functions: aSin(x), aCos(x), aTan(x), aSec(x), aCosec(x), aCotan(x)

Inverse Hyperbolic trig functions: aSinH(x), aCosH(x), aTanH(x), aSecH(x), aCosecH(x), aCotanH(x)

2D inverse tan function: atan2(x)

----------------------------------------------

舍入函数

ceil(x): 向正无穷方向取整

floor(x): 向负无穷方向取整

trunc(x), int: 向零方向取整

round(x): 四舍五入法取整  .5取最接近的偶数(银行家舍入法)

frac(x): 取小数部分。 例如  Frac(-1.32) = -0.32

RoundTo(x, 位): 如果“位”是负或零,则按位数使用银行家舍入法。如果“位”是正,则(rounds to that power of ten using Banker's Rounding.)

SimpleRoundTo(x [,位]): 和RoundTo函数基本一样,除了只四舍五入,不用银行家舍入法。位缺省值是-2。

--------------------------------------------------

正负函数

Sign(x): 如果x是正返回1,如果x是零返回0,如果x是负返回-1。

Abs(x): 返回x的绝对值。

--------------------------------------------------

指数和开方函数

sqr(x):  x^2

sqrt(x): x^(1/2)

power(x,y): calculates x^y

intPower(x,y): x和y取整后算 x^y

exp(x): e^x.  e is 2.71828

Ldexp(s,p):  s * (2^p)

Poly(x, a0, [a1, [a2, [a3, [a4, [a5, [a6]]]]]]):  a0 + a1*x + a2*(x^2) + a3*(x^3) + a4*(x^4) + ...

Log10(x): 10为底数的对数

Log2(x): 2为底数的对数

LogN(N, x): N为底数的对数

Ln(x): 自然对数

LnXP1(x): x+1的自然对数

--------------------------------------------------

比较函数

IsZero(x): 如果是0返回真

IsInfinite(x): returns true if x is infinite

IsNaN(x): 如果不是数字返回真

SameValue(a, b [, epsilon]): 如果a和b相等返回真, or differ by no more than epsilon

InSet(x,a,b,c,d,e,f,g,...): 如果x匹配后面任意一值,则返回真

max(a,b): 返回较大的值

min(a,b): 返回较小的值

--------------------------------------------------

范围函数

EnsureRange(x, a, b): 如果x在[a,b]区间,返回x,如果小于a则返回a,大于b则返回b。

InRange(x, a, b): 如果x在[a, b]区间内返回真

MapRange(x, a, b, c, d):  根据x在[a, b]范围的比例映射[c, d]范围。例如MapRange(2, 1, 3, 10, 30)返回20

EnsureMapRange(x, a, b, c, d): 和MapRange类似,只是当x超出[a,b]区间按EnsureRange反应。例如EnsureMapRange(4, 1, 3, 10, 30)返回30

--------------------------------------------------

随机函数

Random: 返回0到1间的随机数

Random(n): 返回0到n-1的随机整数

RandomRange(a,b): 返回a到b-1的随机整数

RandG(mean, StandDev): 返回高斯分布随机数

--------------------------------------------------

序数函数

odd(n): 如果是奇数返回真

pred(n): 返回 n-1

succ(n): 返回 n+1

--------------------------------------------------

时间函数

Now: 返回当前时间日期在1899.12.30之后多少天(非整数)

Time: 返回Now函数的小数部分

Date: 返回Now函数的整数部分

Tomorrow: 等于Date+1

Yesterday: 等于Date-1

CurrentYear: 返回当前年份

DateOf(x): 返回日单位。例如 DateOf(1999)返回1999 days

TimeOf(x): 返回日单位。例如 TimeOf(0.2)返回0.2 days

DayOfTheMonth(x), DayOfTheWeek(x), DayOfTheYear(x), 

HourOfTheDay(x), HourOfTheMonth(x), HourOfTheWeek(x), HourOfTheYear(x),

Daysbetween(x, y),HoursBetween(x, y),

DaysInAMonth(年,月):返回参数月有几天

DaysInAYear(年):返回参数年有几天

DaysInMonth(x)一直返回31 days;DaysInYear(x)一直返回365 days

DaySpan(x, y), HourSpan(x, y),

IncDay(x, [y])

DayOfweek(天数):返回参数天数除以7后余下的天数

--------------------------------------------------

时序函数

Smooth(x, [额外桢数, [不工作区]])

根据x之前的额外桢数平滑之。不工作区缺省是0.

Pressed(键)按下就返回true。

Clicked(键)点击(压下松开算一次点击)就返回true,不论单击双击。

SingleClicked(键)单击返回true。

DoubleClicked(键)双击返回true。

HeldDown(x, MinTime)

x为真持续时间大于MinTime时返回true。

KeepDown(x, MinTime)

当x为真后,持续保持true输出MinTime时间。

================================================================

运算符

不同类型的量运算会自动转换

a%

百分比号

-b

负号

|b|

取绝对值,b可以是数字、向量或矩阵。

a + b

a plus b

如果a和b是数就加运算;如果a和b是字符串就连接起来;如果a和b是布尔量就等同于and运算符;如果a是向量,b不是,它将扩展长度但不改变方向。

a - b

a minus b

如果a和b是数就减运算;如果a和b是字符串就连接起来;如果a和b是布尔量就等同于and运算符;如果a是向量,b不是,它将扩展长度但不改变方向。

a x b

a * b

a times b

a multiplied by b

a cross b

乘运算

a . b

a dot b

如果a和b是向量就 点乘运算,其他数则等同普通乘运算。

a% of b

a % of b

a%乘以b

a / b

a divided by b

普通除法运算。如果a和b是布尔量就等同于or运算符

a div b

整数除法。(a或b可以是非整数)

a mod b

a % b

取模运算。(注意这是可以非整取模。例如7.5 mod 3.5返回0.5)

a ^ b

a ** b

指数运算

a ^^ b

反复指数运算。例如2^^4就是2^(2^(2^2))

b!

阶乘

b!!

当b为奇数,则等于从1到b的所有奇数的乘积。当b为偶数,则等于从2到b的所有偶数的乘积

a & b

如果a和b是整数,进行逐位与运算,如果是非整数,先取整再运算,如果是字符串则连接起来。

a | b

如果a和b是整数,进行逐位或运算,如果是非整数,先取整再运算,如果是字符串则连接起来。

a shl b

a << b

a左位移b位,等于a * (2^b)

a shr b

a >> b

a右位移b位,等于a div (2^b)

not b

逻辑取反

a and b

a but b

a和b都为真返回真(如果为数,则>-0.5到<0.5的范围内算假)。这只是逻辑运算,不是位运算符。

a or b

either a or b

a或b任意是真则返回真(如果为数,则>-0.5到<0.5的范围内算假)。这只是逻辑运算,不是位运算符。

neither a nor b

a和b都为假返回真

a xor b

当且仅当a或b有一为真,则返回真。

a = b

a == b

当a等于b,则返回真

a != b

a <> b

a isn't b

a is not b

当a不等于b,则返回真

a ~= b

如果a近似等于b,则返回真。(近似相等就是,字符串字母和顺序都一样,除了大小写和空格不算。数字就是当把a转化成b相同的单位制,两者的差的绝对值小于一个很小的值。)

a !~= b

a ~!= b

如果a不近似等于b,则返回真。

a > b

a大于b则返回真

a < b

a小于b则返回真

a >= b

a大于等于b则返回真

a <= b

a小于等于b则返回真

b < a < c

c > a > b

如果a大于b并且小于c,则返回真

b <= a < c

c > a >= b

如果a大于等于b并且小于c,则返回真

b < a <= c

c >= a > b

如果a大于b并且小于等于c,则返回真

b <= a <= c

c >= a >= b

如果a大于等于b并且小于等于c,则返回真

==================================================

键盘

直接键名就可以读或设置。但不推荐

例如F1有以下三种形式

F1

Key.F1  (推荐形式)

Keyboard.F1

还有控制键联合用的写法

^C

Ctrl+C  (推荐)

Ctrl and C

用Key.ScanCode或Key.VK读取键扫描码。

Key.Row返回第几行(键盘最上面为第一行)的按键被按下。无键被按时返回-1。

任意键被按下Key.AnyKey返回true。

设置Key.RawInput为true,用来强制GlovePIE使用RawInput直读键盘,而非用默认的DirectInput方式。

当有多个键盘,使用KeyN.键的形式会自动强制使用RawInput直读键盘。

读Key.Count的值可知正连着几个键盘。

读KeyN.Exists的值可知第N号键盘是否连着。

以下键不能在GlovePIE中使用

F Lock;My Documents;Messenger;LogOff;Power。

非标准的多媒体键和应用程序键能使用,但不能知道被按下多久。

GlovePIE也能模拟输入Unicode字符。Key.Unicode后跟4位16进制数。如Key.Unicode03B1

字母上方数字键除可以Key.1,Key.2,Key.3……(推荐形式),也可以Key.one,Key.two,Key.three……。数字小键盘用Key.NumPad1,Key.NumPad2,Key.NumPad3……形式。数字小键盘上的“+”用Key.NumPadPlus,“-”用Key.NumPadMinus,“*”用Key.NumPadMultiply,“/”用Key.NumPadDivide,“.”用Key.NumPadDot,回车用Key.NumPadEnter。

“`”用Key.Console,“\”用Key.Backslash,“-”用Key.Minus,“=”用Key.Equals,“[”用Key.LeftBracket,“]”用Key.RightBracket,“;”用Key.Semicolon,“'”用Key.Apostrophe,左换档键用Key.LeftShift,右换档键用Key.RightShift,“,”用Key.Comma,“.”用Key.Dot,“/”用Key.Slash,左Ctrl键用Key.LeftCtrl,左窗口键用Key.LeftWindows,左Alt键用Key.LeftAlt,空格键用Key.Space,右Alt键用Key.RightAlt,右窗口键用Key.RightWindows,应用菜单键用Key.AppMenu,右Ctrl键用Key.RightCtrl,上箭头键用Key.Up,下箭头键用Key.Down,左箭头键用Key.Left,右箭头键用Key.Right。

有左右两键的Shift、Ctrl、Alt、Windows都可用Key.Shift,Key.Ctrl,Key.Alt,Key.Windows。

键都可以用Key.Scan后跟十六进制键扫描码表示。例如Key.Scan5B。

==================================================

鼠标

==================================================

Wiimote

Wiimote支持8个Wiimote1到Wiimote8。用Wiimote等于默认Wiimote1。

支持除电源和同步按钮以外的所有按钮。如下:

Wiimote.Up, Wiimote.Down, Wiimote.Left, Wiimote.Right,

Wiimote.A, Wiimote.B,

Wiimote.Minus, Wiimote.Home, Wiimote.Plus

Wiimote.One, Wiimote.Two

Wiimote的加速度测量,X轴向右,Y轴向上,Z轴向前。

Wiimote.gx, Wiimote.gy, Wiimote.gz

Wiimote.g的值是gx,gy,gz的集合。

Wiimote.RawAccX, Wiimote.RawAccY, Wiimote.RawAccZ

Wiimote.RelAccX, Wiimote.RelAccY, Wiimote.RelAccZ

是带单位的加速度值。

Wiimote.RawForceX,Wiimote.RawForceY,Wiimote.RawForceZ是过时的函数,只为向后兼容保留,不建议再用。RawForce可以用固定比例转换到RawAcc。RawForce=RawAcc*2.633

旋转

Wiimote.Pitch, Wiimote.Roll

Wiimote.SmoothPitch, Wiimote.SmoothRoll(平滑值)

Pitch是垂直的角度。正面向上水平放置数值是0,红外头垂直向天花板数值是90,红外头垂直向地面数值是-90。

Roll是水平滚动角度。正面向上水平放置数值是0,向+按钮方向滚动180度数值是180,向-按钮方向滚动180度数值是-180。

Motion Plus

Wiimote.MotionPlus.YawSpeed    水平变动角度数值

Wiimote.MotionPlus.PitchSpeed  垂直变动角度数值

Wiimote.MotionPlus.RollSpeed  滚动变动角度数值

定位条

wiimote.dot1x, wiimote.dot1y

wiimote.dot4x, wiimote.dot4y

返回4个红外灯的坐标

Wiimote.dot1vis, Wiimote.dot2vis, Wiimote.dot3vis, Wiimote.dot4vis

返回4个红外灯点是否被看到。

Wiimote.dot1size, Wiimote.dot2size, Wiimote.dot3size, Wiimote.dot4size

返回4个红外灯点的大小(数值0到15之间)

Wiimote.Leds赋值0到15之间的数,控制Wiimote上的4个LED灯亮灭。

Wiimote.Led1, Wiimote.Led2, Wiimote.Led3, and Wiimote.Led4赋值true或false单独控制Led灯亮灭。

Wiimote.Rumble赋值true,Wiimote力反馈开始震动。

Wiimote.Frequency发出所赋值频率的声音。

Wiimote.Volume赋值0到2之间数调节音量0%到200%。

Wiimote.Speaker赋值true或false控制喇叭发声与否。

Wiimote.Mute赋值true或false,和Speaker功能一样,只是逻辑值正好相反。

Wiimote.SampleRate赋值采样频率。采样率必须是280的整数倍。当前GlovePIE仅支持3640Hz采样率。

Wiimote.Battery读出电量(满电是192)。

读Wiimote.Count的值可知正连着几个Wiimote。

读WiimoteN.Exists的值可知WiimoteN是否连着。

Wiimote中的存储器部分

Wiimote.InByteString读出整个存储器的串。

或分别读

var.a = Wiimote.InReport

var.b1 = Wiimote.InByte1

...

var.bN = Wiimote.InByteN

WiimotePoke([wiimote number], address, value)读Wiimote中的存储器部分

WiimoteSend(wiimote number, report number, [p1, p2, p3…])存进存储器部分

==================================================

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270

推荐阅读更多精彩内容