osg中新增自定義事件UserEvent

2021-07-14 05:09:23 字數 1334 閱讀 7925

新增自定義事件

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

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

[cpp]view plain

copy

struct

timerinfo : 

public

osg::referenced  

unsigned int

_count;  

};  

[cpp]view plain

copy

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