這大約是我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…])存進存儲器部分
==================================================