[GEiv]第三章:輸入接口 所謂“控制感”

第三章:輸入接口

所謂“控制感”

        這篇文章主要介紹使用輸入接口對圖元進行控制。

[遊戲當中的輸入分類]

        1.主動檢索式,在Serial中檢測按鍵的狀態,作出不同的反應,這個適用於控制要求及時、快速的情況,例如控制遊戲角色等。

        2.被動驅動,類似於AWT的事件回調,用於控制要求頻度不高,但往往是單次調用的過程,例如遊戲菜單的控制。

        二者誰也無法替代誰,使用回調控制角色,會有很大的滯後感;而使用主動檢索驅動UI菜單,則會敏感度過高,稍微一按就飛出好幾項之後了。

[主動檢索式]

例子:

@Override
public void Serial(int arg0) {
	if(UES.getKeyStatus(KeyEvent.VK_LEFT)){
		rect.setDx(rect.getDx() - 3);
	}
	if(UES.getKeyStatus(KeyEvent.VK_RIGHT)){
		rect.setDx(rect.getDx() + 3);
	}
	if(UES.getKeyStatus(KeyEvent.VK_UP)){
		rect.setDy(rect.getDy() - 3);
	}
	if(UES.getKeyStatus(KeyEvent.VK_DOWN)){
		rect.setDy(rect.getDy() + 3);
	}
}

        將第二章動態繪製中的Serial改寫如上,運行的結果就是可以使用鍵盤的上下左右控制綠色矩形移動。

API介紹:

        UES:boolean getKeyStatus(int keyCode);

        keyCode是鍵盤按鍵對應的ascii碼,但是我們不需要去記憶整數碼,可以使用KeyEvent.VK_鍵盤字母 的格式進行引用。

        該方法返回此時鍵盤的按鍵狀態,若爲按下,則返回true,否則爲false;

        除去鍵盤,鼠標也有類似的API:

        UES.getMouseButtonStatus(arg0),它可以獲得當前鼠標的按鈕狀態,1,2,3在本人的設備上分別對應左鍵、中鍵(滾輪按下)、右鍵;

        UES.getCrtMouseX(),UES.getCrtMouseY()則返回當前鼠標位置。

=====================================================

[被動驅動]

        被動驅動的實現就沒有上面簡單了。

以鍵盤爲例:

[interface geivcore.KeyFactor]

        KeyFactor接口:所有響應鍵盤迴調的類需要實現KeyFactor接口,它包括了三個方法:

        public void setKeyListener(KeyListener keyListener);

        public void removeKeyListener();

        public void keyFactor(int keyCode,boolean ispressed);

        如果需要響應鍵盤的類沒有繼承其他類,則可選擇繼承geivcore.DefaultFactor類,進行默認的鍵盤響應實現。

[interface geivcore. KeyListener]

        KeyListener接口:所有處理回調的邏輯實現自該接口,該接口只有一個方法:

        public void doKeyBord(KeyFactor whom,intkeyCode,boolean ispressed);

        whom是響應的KeyFactor對象,keyCode是按鍵對應的ascii碼,ispressed標識着是按下還是擡起。

        在實現了上兩個接口後,使用UES.pushKeyBoardIO(KeyFactor factor)方法,將KeyFactor壓入鍵盤IO的棧頂,我們的鍵盤指令會始終傳遞給棧頂的KeyFactor,這是爲了適應傳統的UI系統。

        *注意,雖然KeyFactor、KeyListener與UES鍵盤棧系統被保留到高層,允許開發者自己去實現,但這一過程確實有些複雜,因此在開發工具集中留有Component類作爲UI組件工具,也有AutoList類用於從XML文件中構架菜單結構,在工具類的介紹章節裏會詳細介紹。

[總結]

       介紹了主動監測與被動回調兩種輸入方案,其中被動驅動的實現較爲複雜,因此建議儘量使用工具類中的現成組件。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章