2016年8月17日 星期三

Game controllers on Adobe AIR



Reference Link:

Game controllers on Adobe AIR
ゲームパッドでブラウザゲームが遊べる時代が来た!
Adobe AIR の GameInput クラス
Adobe官方文件 GameInput - AS3
Adobe官方文件 GameInputDevice - AS3
Adobe官方文件 GameInputControl - AS3
Adobe官方文件 GameInputEvent - AS3




參考ICSの川勝 研太郎先生的DEMO自行測試,雖已經是3年以前的文章,
其實用性與現況綜合相較之下,很可能有不少變化,
但抱著用遊戲手把玩著AIR開發的遊戲夢想,

也還是忍不住花了時間下去實測研究一番。

可惜的是..........先說結論

若要用手把操作AIR開發的遊戲不是不行,

但自由度似乎不如想像中來得多,
有點難以發揮遊戲手把的充分機能(特別是PS3 Controller)。





Hardware:

Xbox 360 Controller

Xbox 360 Controller-1
圖中數字為GameInput API 所測得按鈕對應之數字。
很奇妙地...不知為何,BACK無作用也就算了,就連X也沒有回饋?




Xbox 360 Controller-2


根據GameInput API,裝置傳回的控制項(按鈕或方向鍵),將其對應按鈕視覺化。
上方為按鈕,下方為方向軸。

實測結果:

僅有BUTTON_6(可能對應X)、BUTTON_12(可能對應BACK),沒有取得任何返回值。
而方向軸AXIS_0&1、 AXIS_2&3則對應到兩個類比搖桿。
黑點可在灰框內任意移動(返回值是Number因此有數據上的不停變化),
而不像按鈕僅有0、1 or -1的值。


雖然有按鈕沒有作用(有點奇怪?),但大致上來說結果是正常合理。




PS3 Controller

PS3 Controller-1

PS3 Controller-2

紅色框線表示,雖有取得GameInputControl.id,
但像是BUTTON_6~9、23~29,根本沒有實體的對應按鈕。
而 
AXIS_2 & 3、AXIS_4 & 5應該是對應實體的兩個類比搖桿,
也都毫無作用
 =_=|||

僅有L3 & R3反映著BUTTON_20 & 21。
雖然手把上的實體按鈕都有作用(這倒是比Xbox手把好),
但可惜的是完全無法取得類比搖桿功能的返回值,
若要進行遊戲,僅能用AXIS_0 & 1 (十字鍵) 來操控方向。





詭異之處
(1) 不是每次都能同時偵測到PS3手把
在兩支手把同時接上時,
能夠各自取得不同手把的返回數值。(可以實現對戰或偕同遊戲了!?)

但卻不是每次同時插上兩支手把,都能夠正常被偵測到。(電源燈都有亮)
總會有讀取不到PS3手把的時候,但若只有插上PS手把時就可被偵測。
而Xbox 360手把則完全無此問題。





(2) 同一支PS3手把插在不同USB Port結果不同
上圖是將Cable插在主機後方的USB Port (先前是插在主機前方)
發現不同之處:
1> id & name 完全不同
2> AXIS & BUTTON 數量也不一樣
3> 最誇張的是,完全無法觸發Event.CHANGE,完全無用! Orz

What's going on with that !?





(3)同一支PS3手把的id會變化!?
依舊是同一支手把測試,但是經過上述測試後又再接回PC前方USB埠,
name雖然還是一樣,但id卻又完全不同了!?
在IDE內測試 & 本機環境下執行居然會不一樣!?
究竟是怎麼回事呀......





(4)AIR SDK 22 有點小問題原本測試時是使用ver.21,
因有上述問題猜想更換到最新SDK後或許可以得到不同測試結果,
不過卻完全出乎意料的是更新SDK至22後,
Flach CC 2014 IDE內發布測試,
會不停地先偵測到裝置、而後又自動偵測到裝置被移除(實際上沒有移除),
如此不停循環下去(外部開啟swf時則無此問題),
而在SDK版本3.7、13、14、16、21皆無此問題。
 (新版本不一定穩定)




綜合以上測試,
能用歸能用,
雖說Adobe AIR Developer Center Article & Example是關於OUYA TV,
但AIR SDK對PS3 Controller的支援度實在是不怎麼高呀

(還有奇怪的不解之謎)


唉~~加油好嗎? (測試過程都變成抱怨文)







沒有留言:

張貼留言