Delta3d组件以及消息机制
生活随笔
收集整理的這篇文章主要介紹了
Delta3d组件以及消息机制
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在游戲管理器(GameManager)中維護一個消息隊列std::queue(mSendMessageQueue),在GameManager::SendMessage中將消息放入隊列中,如下
void GameManager::SendMessage(const Message& message){mGMImpl->mSendMessageQueue.push(dtCore::RefPtr<const Message>(&message));}然后在每一幀的渲染過程中處理消息隊列中的消息,調用所有組件的ProcessMessage函數,過程如下
void GameManager::DoSendMessages(){// PROCESS MESSAGES - Send all Process messages to components and interested actorswhile (!mGMImpl->mSendMessageQueue.empty()){mGMImpl->mGMStatistics.mStatsNumProcMessages += 1;// Forward to Components firstdtCore::RefPtr<const Message> messageRef = mGMImpl->mSendMessageQueue.front();mGMImpl->mSendMessageQueue.pop();if (!messageRef.valid()){mGMImpl->mLogger->LogMessage(dtUtil::Log::LOG_ERROR, __FUNCTION__, __LINE__,"Message in send queue is NULL. Something is majorly wrong with the GameManager.");continue;}const Message& message = *messageRef;DoSendMessage(message);}}void GameManager::DoSendMessage(const Message& message){DoSendMessageToComponents(message, false);} void GameManager::DoSendMessageToComponents(const Message& message, bool toNetwork){GMImpl::GMComponentContainer::iterator compItr = mGMImpl->mComponentList.begin();while (compItr != mGMImpl->mComponentList.end()){ //RefPtr in case it get deleted during a Message. We need to hang onto it for a bit.dtCore::RefPtr<GMComponent>& component = *compItr; component->ProcessMessage(message); ++compItr;}}
總結
以上是生活随笔為你收集整理的Delta3d组件以及消息机制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OpenGL渲染管线,着色器,光栅化等概
- 下一篇: Delta3d插件机制