新增自定義事件以及對osg事件佇列的簡單理解

2021-06-27 01:17:35 字數 1156 閱讀 1319

新增自定義事件

首先osg在其內部通過osgga::eventqueue類維護了乙個事件佇列,佇列中的每乙個事件都是乙個osgga::guieventadapter物件(這個物件是用來存放所系統捕捉到的事件),在**迴圈階段被系統捕捉到的所有事件都會被新增到這個事件佇列中,之後會有乙個事件遍歷過程,在這個過程中實際上就是遍歷這個事件佇列,並且對事件佇列中的每乙個事件,它都會與我們在事件處理類中方法進行響應(如果事件處理類中沒有對這個事件的處理則不會響應)。 

(此**來自於王銳老師的beginner『s guide中240頁)

struct timerinfo : public osg::referenced

unsigned int _count;

};

bool timerhandler::handle( const osgga::guieventadapter& ea,

osgga::guiactionadapter& aa )

}_count++;

break;

case osgga::guieventadapter::user:

if ( _switch.valid() )

break;

default:

break;

}return false;

}

在上面這個handle函式中,我們定義了對兩個事件的處理,乙個為frame事件,另乙個為user事件,在frame事件的處理中,首先判斷_count值是否能唄100整除(在每乙個frame事件中都會使_count值加一),即每過100幀就會執行一遍if語句下面的內容。在if語句中,它通過呼叫userevent方法將事件加入到事件佇列中。

上面的是userevent函式的實現原始碼,我們可以看到在呼叫userevent方法時,其函式內部的實現如上,首先設定時間型別為user(即我們用此方法新增到事件佇列中的事件的型別為user),其次呼叫setuserdata方法設定使用者資料,之後設定時間,最後通過addevent方法將其新增到事件佇列中去。這樣我們就能在事件處理的handle函式中對此事件進行響應了。

osg中新增自定義事件UserEvent

新增自定義事件 首先osg在其內部通過osgga eventqueue類維護了乙個事件佇列,佇列中的每乙個事件都是乙個osgga guieventadapter物件 這個物件是用來存放所系統捕捉到的事件 在 迴圈階段被系統捕捉到的所有事件都會被新增到這個事件佇列中,之後會有乙個事件遍歷過程,在這個過...

osg中新增自定義事件UserEvent

新增自定義事件 首先osg在其內部通過osgga eventqueue類維護了乙個事件佇列,佇列中的每乙個事件都是乙個osgga guieventadapter物件 這個物件是用來存放所系統捕捉到的事件 在 迴圈階段被系統捕捉到的所有事件都會被新增到這個事件佇列中,之後會有乙個事件遍歷過程,在這個過...

jQuery 新增自定義事件以及觸發自定義事件

一 新增自定義事件 通過jquery的bind 或者on 方法 新增自定義事件 如下 自定義了乙個mychange事件 postionid on mychange function 二 觸發自定義事件 通過jquery的trigger 方法 觸發自定義事件mychange postionid tri...