亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

請幫忙指出問題所在,并在不對框架做過分改變的前提下修改代碼解決:

請幫忙指出問題所在,并在不對框架做過分改變的前提下修改代碼解決:

波斯汪 2023-01-07 21:13:03
是我自己編寫的一個Ogre基本框架,編譯運行是一個黑色窗口,但是關閉黑色窗口后任務管理器中仍然有這個程序的進程在,只能強行結束,我試過很多方法,運用windows循環、rengderOneFrame什么的,研究了一天一夜也沒能解決,無論如何窗口關閉后進程就是死賴在內存了釋放不了,#include <Ogre.h>#include <windows.h>//使用Ogre的命名空間以識別Ogre提供的類using namespace Ogre;//根據幀監聽父類派生出自己的幀監聽子類并自定義幀監聽中所要達到的功能class MyFrameListener : public FrameListener{public:bool frameStarted (const FrameEvent &evt);bool frameEnded (const FrameEvent &evt );};bool MyFrameListener::frameStarted (const FrameEvent &evt){//在每一幀畫面渲染前,調用這里你寫好的代碼return true;}bool MyFrameListener::frameEnded (const FrameEvent &evt ){//在每一幀畫面渲染后,調用這里你寫好的代碼return true;}int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow ){//創建root類得對象,參數為默認參數Root* root = new Root("plugins_d.cfg", "ogre.cfg", "Ogre.log");if(!root -> restoreConfig())root -> showConfigDialog();//初始化渲染窗口root -> initialise(true, "亂雨紅塵渡");RenderWindow* window = root -> getAutoCreatedWindow();SceneManager* sceneMgr = root -> createSceneManager(ST_GENERIC, "MySceneManager");Camera* camera = sceneMgr -> createCamera("MainCamera");camera -> setNearClipDistance(5);camera -> setFarClipDistance(1000);camera -> setAspectRatio(Real(1.333333)); //設置屏幕縱橫比為4:3//創建視口Viewport* vp = window -> addViewport(camera);vp -> setBackgroundColour(ColourValue(0, 0, 0));//設置渲染循環(Render Loop)MyFrameListener* myListener = new MyFrameListener();//在這里你需要在調用startRendering()方法前,注冊你的幀監聽對象!?。oot -> addFrameListener(myListener);//root -> startRendering();//用更靈活的Root::renderOneFrame()方法使Ogre渲染循環與windows消息循環融合,控制循環始終bool keepRendering = true;//在這里填入所有這個章節之前提到的設置過程://載入插件,創建渲染窗口和場景管理器以及攝像機和視口,//然后再場景中填入你希望的內容。while(keepRendering){//在這里處理引擎使用的網絡消息。//在這里處理引擎使用的輸入消息。//根據消息更新場景管理狀態。//根據新的場景管理狀態,渲染下一幀。root->renderOneFrame();//檢查是否需要退出渲染循環if (){keepRendering = false;}}//在這里進行你需要的清理工作//然后,關閉Ogredelete root;}
查看完整描述

2 回答

?
互換的青春

TA貢獻1797條經驗 獲得超6個贊

同感!浪費了不少時間


bool frameStarted(const Ogre::FrameEvent& evt)      {            if (Ogre::Root::getSingletonPtr()->getAutoCreatedWindow()->isClosed()) return false// 若渲染窗口已關閉則退出渲染循環            return true;      }

可以解決這個問題。

網上幾乎全部的教程都沒有提到這個重要的問題,說什么點擊關閉就會退出,是不對的


查看完整回答
反對 回復 2023-01-10
?
30秒到達戰場

TA貢獻1828條經驗 獲得超6個贊

winMain函數沒返回值

class MyFrameListener: public FrameListener, public WindowEventListener 或者MyFrameListener直接公有繼承ExampleFrameListener

查看完整回答
反對 回復 2023-01-10
  • 2 回答
  • 0 關注
  • 156 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號