創作內容

0 GP

Qt搖桿驅動程式(二)

作者:likwueron│2014-01-24 19:25:14│巴幣:0│人氣:292
經過一些試誤和重寫後,總算完成了30%了呢。
說到重寫,那還真的是血淚。



所以在介紹成果之前先來說一下規劃好了。
其實之前我早就看過很多經驗老道的程式員的心得了:你不能一下子就埋頭寫程式,不然會一團糟。
只是很明顯的我是那種要痛過才了解的人。


一開始的想法很簡單,先完成Joystick的部份,然後再做Controller。
反正,好幾天前就搞定了,那就來想一想Controller吧!
結果碰上了大問題:
我要怎麼知道Joystick要套用哪一種Controller的配置?

而以SDL的文件來看,比較有識別度的只有方向鍵的數量、軸的數量、按鈕的數量和軌跡球的數量。
而如果要存取這些東西,就必需先「開啟」SDL_Joystick。
所以我就有了新想法:既然都要開啟,那就一直開啟吧!

但這樣一來就和我原本寫的Joystick有所衝突,我必需要把原本「當有需求時才建立物件」改成「一開始就建立物件」。
而當我這麼做的時候就會感受到一股煩燥感,也許是感覺之前寫過的東西要砍掉很煩吧?

所以規劃真的很重要(認真)



下載
已知問題:
1. class Window中的變數 mp_gc 應預設為0(空指標) 但卻沒有

2. Joystick::refreshJoystickList() 第87行 QList<Joystick*> tempList = sm_joystickList; 應為 QList<Joystick*> tempList;

管理函式
初始化 Joystick::init() 啟動SDL, 取得搖桿清單, 建立對應的Joystick物件
結束 Joystick::quit() 移除所有的Joystick, 關閉SDL
更新清單 Joystick::refreshJoystickList()
取得搖桿清單 Joystick::joystickNameList 僅回傳名稱。順序和id相同,也就是第0個的id是0
取得Joystick指標 Joystick::createJoystick(int) create這字眼有詐欺之嫌(被巴)

目前沒有實現thread-safe,請不要對它使用多線程。
你無法直接使用Joystick的建構式或解構式,而是要間接使用上述的函式。

對外訊號(signals)
axisValueChanged(int id, qint16 value)
按鈕 buttonValueChanged(int id, qint8 value)
方向鍵 hatValueChanged(int id, qint8 value)
軌跡球 trackballValueChanged(int id, int dx, int dy) 未檢驗
全部 dataValueChanged(const JoystickData*) 未實作

之前在網路上看到有兩種方法,一種是當發現改變時就丟訊號,另一種是收集所有的改變後再丟。
至於優劣嘛,我不清楚。
按鈕部份,由於原本提供的值就是8-bit,所以輸出也用8-bit,不過用bool (1-bit)應該就可以了。

停止使用 stopUse() 停止Joystick的timer並切斷訊號傳送
取得配置 layout() 以字串依續表達:方向鍵數量, 軸數量, 按鈕數量, 軌跡球數量
設定敏感度 setSensitivity(int id, qint16 value) 值越大,就要讓軸的變量越大才會發送訊號
(預設:200, 0.3%)
設定盲區 setDeadzone(int id, qint16 value) 以軸的原點(放開時)建立一個區域,當移動超出此範圍時才會發出非0的訊號
(預設:2000, 3%)

說到layout啊,我最後改用SDL2了,因為它至少能正確抓到6個軸,這讓其它缺點變得可以忍受。
在Windows下,layout()會回傳 "00061500",即0個方向鍵、6個軸、15個按鈕和0個軌跡球。(正常是"01061100")
引用網址:https://home.gamer.com.tw/TrackBack.php?sn=2320461
Some rights reserved. 姓名標示-非商業性 2.5 台灣

相關創作

同標籤作品搜尋:Qt|搖桿

留言共 0 篇留言

我要留言提醒:您尚未登入,請先登入再留言

喜歡★iqandadie 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:2014冬.新番電波... 後一篇:編譯器和函式庫的相容性...

追蹤私訊切換新版閱覽

作品資料夾

e975483216天氣
天氣好熱R 甘霖老師看更多我要大聲說昨天22:54


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】