第3章.投入觸摸

目錄
處理操縱桿
處理鍵盤

處理操縱桿

預置

第一在使用一在一個SDL程式中操縱桿方面步是要預置SDL的操縱桿子系統.這個透過把 SDL_INIT_JOYSTICK旗幟傳給 SDL_Init做.因為操縱桿通常被過去經常控制某樣東西,操縱桿旗幟將通常結合其它旗幟((像影像旗幟)被使用.

例子3-1.操縱桿技術支持地預置SDL

    如果(SDL_Init((SDL_INIT_VIDEO或者SDL_INIT_JOYSTICK)<0)那時
開始
MessageBox 0,PChar格式化Couldn t預置SDL:%s'[,SDL_GetError'],錯誤,MB_OK或者MB_ICONHAND;
使(1)停下來;
末端;

這個將嘗試開始SDL隨著影像和操縱桿子系統被激活的.

提出問題

如果我們已經這點達到,那時我們能安全認為SDL圖書館被預置和操縱桿子系統是活躍.在我們需要操縱桿之前,現在我們能給一些影像打電話和/或發出功能的信號使東西開始去.最終我們必須確保事實上有一和在一起工作操縱桿.即使你知道因為它能也幫助察覺什麼時候拔去操縱桿的塞子,一操縱桿將有關系統在場,是總是檢查是明智的.過去經常為操縱桿檢查功能是 SDL_NumJoysticks.

這個功能簡單歸還有關系統可用操縱桿的數目.如果它是至少一,那時我們是情況很好.下一步是要決定用戶想要哪一個操縱桿使用.如果可用操縱桿的數目僅是一回事,那時假定一操縱桿用戶想要使用的是一回事是安全的.SDL有一個功能要如同按照運算系統分配那樣,聽清操縱桿的名字和那個功能是 SDL_JoystickName.操縱桿被一索引,0在什麼地方是第一操縱桿和最後操縱桿是在 SDL_NumJoysticks-1旁邊歸還數的指定.在演示中一清單在所有中可用操縱桿向stdout被加印

例子3-2.懷疑可用操縱桿的數目

    MessageBox 0,PChar格式化'%d操縱桿被發現'.[SDL_NumJoysticks]',資訊',MB_OK或者MB_ICONHAND;
printf("(操縱桿are:\n)"的名字;

SDL_NumJoysticks 1可以替代i:=0
開始
操縱桿:=SDL_JoystickName((i)+#13#10;
末端;
MessageBox 0,PChar格式化操縱桿的名字是:%s'[,操縱桿'],資訊,MB_OK或者MB_ICONHAND;

打開一操縱桿和收到操縱桿事件

SDL的和操縱桿在一起引起一啪嗒一聲事件驅動建築學製造.操縱桿能引發4種不同類型的事件:

SDL_JoyAxisEvent 當一軸改變的時候,發生
SDL_JoyBallEvent 當一處境改變的操縱桿的時候,發生
SDL_JoyHatEvent 當一處境改變的時候,發生
SDL_JoyButtonEvent 當是按電鈕或者發佈的時候,發生

事件從所有的操縱桿被收到打開.第一為了收到操縱桿事件,應該是做的東西是要隨著SDL_ENABLE 旗幟大聲說出 SDL_JoystickEventState.下一步你必須打開你想要從收到envents的操縱桿.這個完成 SDL_JoystickOpen功能.為例子我們不管它什麼是如何是僅僅對從第一有關系統操縱桿事件有興趣.從它收到事件我們將做這個:

例子3-3.打開一操縱桿

    操縱桿:PSDL_Joystick;

SDL_JoystickEventState((SDL_ENABLE);
操縱桿:=SDL_JoystickOpen(0);

如果我們想要為其它操縱桿收到事件,才只是就像要不是我們將在一不同指針中儲藏他們歸還的SDL_Joystick 結構,我們打開操縱桿0,我們將用向SDL_JoystickOpen呼叫打開他們.我們僅需要操縱桿指針,其我們正懷疑操縱桿或者什麼時候我們正關閉操縱桿的.

以至這點為了在運行時間時刻閱讀價值觀,使用所有的我們有的代碼才只是預置操縱桿.現在我們需要的所有的是一事件圈,其是所有的SDL程式應該不管怎樣有的收到系統離開事件某樣東西的.現在我們必須接著說代碼,前往至少某些上面的檢查事件圈提到事件讓我們認為我們事件圈看起來像這個:

    事件:TSDL_Event;
//另一initializtion代碼這裡去

這裡//出發主要勇敢圈

(SDL_PollEvent((&event))的同時
開始
event.type_裝入盒子
SDL_KEYDOWN:
開始
//柄鍵盤這裡填塞*/
末端;

SDL_QUIT:
開始
//開始動起來任何東西旗幟是必然
//結束這裡主要勇敢圈
末端;
末端;
末端;

這裡//末端圈
處理操縱桿事件我們僅僅添加他們的問題,首先我們將添加軸觸摸代碼.軸檢查能得到有點兒的棘手因為收到操縱桿事件的alot是廢棄的舊東西.操縱桿軸在由於他們是設計的方式投票之間有一的趨勢要改變才只是一點.補償這個你必須為改變準備一門檻和忽視事件have'nt超過門檻.10%通常是一好的門檻價值.這個聽起來像是比它是更很多複雜.這裡是軸事件操作者:

例子3-4.操縱桿軸事件

    SDL_JOYAXISMOTION://柄操縱桿運動
開始
如果((event.jaxis.value<-3200)或者(event.jaxis.value>3200))那時
開始
//代碼這裡去
末端;
末端;

另一隨著軸事件計謀是沿著向下和留下正確動作那個是二不同套斧.最重要軸是正確離開軸0和軸1(向上向下).對待他們seperatly在代碼中我們模仿下列的:

例子3-5.更多操縱桿軸事件

    SDL_JOYAXISMOTION://柄操縱桿運動 
開始
如果((event.jaxis.value<-3200)或者(event.jaxis.value>3200))那時
開始
如果(event.jaxis.axis=0)那時
開始
//左邊權利動作代碼這裡去
末端;

如果(event.jaxis.axis=1)那時
開始
//沿著順動作代碼而下這裡去
末端;
末端;
末端;

理想的情況是這裡代碼應該使用event.jaxis.value 稱某樣東西的重量.例如出租認為你正使用操縱桿控制一艘太空船的動作.如果用戶正使用一類似物操縱桿和他們按有些柴枝,他們期望移動更少一點與相比如果他們很多推行它.因為它為類似物控制手段的用戶更好些作經驗和對於數字的控制手段的用戶同樣地仍然存在,設計你的為這處境密碼被更喜歡.

如果你的操縱桿有任何附加軸,那時他們可以為其它柴枝或者節流閥控制手段和那些軸回程價值觀隨著不同event.jaxis.axis價值觀太才只是被使用.

是不做作把按鍵觸摸和軸檢查比較.

例子3-6.操縱桿按鍵事件

    SDL_JOYBUTTONDOWN://柄操縱桿按鍵壓 
開始
如果(event.jbutton.button=0)那時
開始
//代碼這裡去
末端;
末端;

因為能僅按電鈕被或者不按電鈕,按鍵檢查是與軸檢查相比更不做作.當一個按鍵是pressed的時候,SDL_JOYBUTTONDOWN 事件是裝有觸發器的和當一個按鍵是發佈的時候, SDL_JOYBUTTONUP事件被燒.我們確實必須知道扣上鈕扣儘管是pressed的,那個透過閱讀 event.jbutton.button田野被做.

最後當我們經歷使用我們操縱桿的時候,我們應該以一向SDL_JoystickClose 呼叫關閉他們.關閉我們打開操縱桿0我們將在我們程式的極限做這個:

    SDL_JoystickClose((操縱桿);

先進操縱桿運轉

那個被太陽照到處理你能指望的對是在每一個操縱桿上的控制,但是有一點SDL能支持的額外東西.Joyballs在我們清單上是下一個,他們像軸是alot我們一點些微差異.Joyballs商店親戚改變不相像在一軸事件中儲藏完全後離子.也一跟蹤球事件含有兩者都x的改變和他們y的改變.我們它的問題如下是:

例子3-7.操縱桿包爾事件

    SDL_JOYBALLMOTION://柄Joyball運動
開始
如果(event.jball.ball=0)那時
開始
//球觸摸
末端;
末端;

上面的在操縱桿上檢查第一joyball位置的改變將在event.jball.xrelevent.jball.yrel中被儲藏.

最後我們有帽子事件.帽子報告僅他們進入被逼迫方向.我們把處境和bitmasks核對:

SDL_HAT_CENTERED
SDL_HAT_UP
SDL_HAT_RIGHT
SDL_HAT_DOWN
SDL_HAT_LEFT

也有一些上面的預先定義結合

SDL_HAT_RIGHTUP
SDL_HAT_RIGHTDOWN
SDL_HAT_LEFTUP
SDL_HAT_LEFTDOWN

我們帽子的盒子可以很像下列的:

例子3-8.操縱桿帽子事件

    SDL_JOYHATMOTION://柄帽子運動
開始
如果那時(event.jhat.hat或者SDL_HAT_UP)
開始
//沿著確實這裡飽食
末端;

如果那時(event.jhat.hat或者SDL_HAT_LEFT)
開始
//處理這裡左邊材料
末端;

如果那時(event.jhat.hat或者SDL_HAT_RIGHTDOWN)
開始
//正確和順一起這裡材料而下做
末端;
末端;

附加功能是除了之外為有關那裡系統和他們的名字操縱桿的數目問題懷疑附屬操縱桿的才能:

SDL_JoystickNumAxes joysitck的數目大刀闊斧削減的回報
SDL_JoystickNumButtons joysitck的數目扣上的回報
SDL_JoystickNumBalls joysitck的數目把回報捏成球狀的
SDL_JoystickNumHats 歸還joysitck帽子的數目

使用這些我們才只是必須把操縱桿結構傳入的功能當我們打開操縱桿的時候,我們到達.例如:

例子3-9.懷疑操縱桿特徵

    number_of_buttons:整數;
操縱桿:PSDL_Joystick;

操縱桿:=SDL_JoystickOpen(0);
number_of_buttons:=SDL_JoystickNumButtons((操縱桿);

這大塊代碼將在第一在系統中操縱桿上得到按鍵的數目.