osg中新增自定義事件UserEvent

2021-10-10 23:47:07 字數 1176 閱讀 4507

新增自定義事件

首先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物件 這個物件是用來存放所系統捕捉到的事件 在 迴圈階段被系統捕捉到的所有事件都會被新增到這個事件佇列中,之後會有乙個事件遍歷過程,在這個過...

自定義控制項新增事件

事件,委託,總是看起來有點繞,不過本文不介紹這些,只說說如何為自定義控制項新增自定義事件。本文所說的自定義控制項,非繼承其他現有microsoft控制項或者組合控制項,而是完全繼承usercontrol的東西。既然不是繼承自其他現有控制項或者控制項組合,在特定需求下,有新增自定義事件的可能性,或者對...

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

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