日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

osg中添加自定义事件UserEvent

發布時間:2023/12/15 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 osg中添加自定义事件UserEvent 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

添加自定義事件

首先osg在其內部通過osgGA::EventQueue類維護了一個事件隊列,隊列中的每一個事件都是一個osgGA::GUIEventAdapter對象(這個對象是用來存放所系統捕捉到的事件),在仿真循環階段被系統捕捉到的所有事件都會被添加到這個事件隊列中,之后會有一個事件遍歷過程,在這個過程中實際上就是遍歷這個事件隊列,并且對事件隊列中的每一個事件,它都會與我們在事件處理類中方法進行響應(如果事件處理類中沒有對這個事件的處理則不會響應)。?

(此代碼來自于王銳老師的Beginner‘s Guide中240頁)

struct TimerInfo : public osg::Referenced { TimerInfo( unsigned int c ) : _count(c) {} unsigned int _count; }; bool TimerHandler::handle( const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& aa ) { switch ( ea.getEventType() ) { case osgGA::GUIEventAdapter::FRAME: if (_count % 100 == 0 ) { osgViewer::Viewer* viewer = dynamic_cast<osgViewer::Viewer*>(&aa); if ( viewer ) { //在這里,我們添加了一個用戶自定義的時間,我們只需要在下面的時間類型中對USER類型進行判斷即可對此事件進行處理, //注意其參數是一個繼承自Reference類的對象。 viewer->getEventQueue()->userEvent( new TimerInfo(_count) ); } } _count++; break; case osgGA::GUIEventAdapter::USER: if ( _switch.valid() ) { //同過getUserData方法,直接獲取用戶數據(我們在上面傳入的繼承自Reference類的對象) const TimerInfo* ti = dynamic_cast<const TimerInfo*>( ea.getUserData()); std::cout << "Timer event at: " <<ti->_count<< std::endl; _switch->setValue( 0, !_switch->getValue(0) ); _switch->setValue( 1, !_switch->getValue(1) ); } break; default: break; } return false; }

?在上面這個handle函數中,我們定義了對兩個事件的處理,一個為FRAME事件,另一個為USER事件,在FRAME事件的處理中,首先判斷_count值是否能被100整除(在每一個FRAME事件中都會使_count值加一),即每過100幀就會執行一遍if語句下面的內容。在if語句中,它通過調用userEvent方法將事件加入到事件隊列中。

?上面的圖片是userEvent函數的實現源碼,我們可以看到在調用userEvent方法時,其函數內部的實現如上,首先設置事件類型為USER(即我們用此方法添加到事件隊列中的事件的類型為USER),其次調用setUserData方法設置用戶數據,之后設置時間,最后通過addEvent方法將其添加到事件隊列中去。這樣我們就能在事件處理的handle函數中對此事件進行響應了。

轉載地址:http://blog.csdn.net/u010133496/article/details/41155033

?

總結

以上是生活随笔為你收集整理的osg中添加自定义事件UserEvent的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。