这大约是我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…])存进存储器部分
==================================================
网友评论