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…])存进存储器部分

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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容