1. 程式人生 > >OSG學習筆記15-OSG中對事件的處理

OSG學習筆記15-OSG中對事件的處理

看了王銳大大的書,我感覺OSG中對事件的處理主要是由以下幾塊組成的:

1、事件介面卡 GUIEventAdapter

這個類是作為系統互動事件和OSG互動事件的適配介面。這一句話還不是很理解。

原始碼文件裡對於這個類的定義是:事件類,儲存鍵盤、滑鼠和視窗事件。

公有型別包括:

(這些型別都是列舉型別,每個型別中有若干整形常量)

MouseButtonMask

EventType :OSG中定義了的人機互動事件型別

KeySymbol:OSG中的鍵盤按鍵標識

ModKeyMask:OSG中的鍵盤按鍵標識2

MouseYOrientation

ScrollingMotion

TabletPointerType

enum TouchPhase{TOUCH_UNKNOWN,TOUCH_BEGAN,TOUCH_MOVED,TOUCH_STATIONERY,TOUCH_ENDED}

2、動作介面卡 GUIActionAdapter

使用者向系統傳遞請求通過GUIActionAdapter類來實現。所有的動作都會傳遞給平臺相關的視窗系統。

3、事件佇列

EventQueue就是事件佇列,可以理解為一個互動事件的集合,它儲存了一個GUIEventAdapter的佇列,記錄了所有傳遞給場景的滑鼠和鍵盤事件。

4、事件處理器

GUIEventHandler,是OSG鍵盤和滑鼠互動事件的處理終端,它提供了可擴充套件的虛擬函式handle(),這個函式是使用者自定義的互動事件處理工具。通過對這個類的派生和虛擬函式的重構就能夠構建使用者自定義的事件處理器,對相應的事件做出相應的操作。

5、virtual bool osgGA::GUIEventHandler::handle(const GUIEventAdapter& ea,GUIActionAdapter& aa);

@para1 const GUIEventAdapter& ea : 事件介面卡:通過這個物件來判斷當前要處理的事件型別,它只能被獲取不能修改,所以是const型別。

@para2 GUIActionAdapter& aa:動作介面卡:反饋動作,大多數時候這個傳入值表示當前所用的檢視物件View,可以用它來獲取或控制視景器的狀態變化。

重構這個函式可以完成各種使用者自定義的互動操作。