CEGUI教程 - 图文(9)

2020-02-21 13:43

Ogre 1.4.0

现在将程序中下列代码段注释掉 mEditorGuiSheet=

CEGUI::WindowManager::getSingleton().createWindow((CEGUI::utf8*)\ mGUISystem->setGUISheet(mEditorGuiSheet);

CEGUI::PushButton* quitButton =

(CEGUI::PushButton*)CEGUI::WindowManager::getSingleton().createWindow

(\(CEGUI::utf8*)\

mEditorGuiSheet->addChildWindow(quitButton); quitButton->setPosition(CEGUI::Point(0.35f, 0.45f)); quitButton->setSize(CEGUI::Size(0.3f, 0.1f)); quitButton->setText(\在同样位置添加下列代码 mEditorGuiSheet =

CEGUI::WindowManager::getSingleton().loadWindowLayout((CEGUI::utf8*)\

mGUISystem->setGUISheet(mEditorGuiSheet);

CEGUI::PushButton* quitButton=(CEGUI::PushButton*)CEGUI:: WindowManager::getSingleton().getWindow((CEGUI::utf8*)%uit\

最后一行多余的,因为我们没有在之后使用指针,但是其说明了如何通过加载文件来进行访问。注意:我们在创建xml文件时要根据实际窗口进行设计。 完成后编译并执行,程序在外观上并没有变化。

尝试

?视线相交和选取Ogre mesh—当鼠标没有从GUI元素上移过。 ?定义一个在GUI根菜单上的鼠标点击动作。当你鼠标点击一个不在根窗口中的GUI元素时,它将会响应你的鼠标点击。如果你的鼠标并没有从一个 GUI元素上滑过(也就是说当你的鼠标指针还在我们的3D场景中)则根窗口响应鼠标点击。 ?将鼠标点击转换到世界坐标系和视线相交((Camera::getCamera)到ViewportRay(mouseX, mouseY)) // Start a new ray query

Ogre::Ray cameraRay = root::getSingleton( ).

getCamera( )->getCameraToViewportRay( mouseX, mouseY ); Ogre::RaySceneQuery *raySceneQuery = root::getSingleton( ). getSceneManager( )->createRayQuery( cameraRay ); raySceneQuery->execute( );

Ogre::RaySceneQueryResult result = raySceneQuery->getLastResults( );

Ogre::MovableObject *closestObject = NULL; real closestDistance = LONG_MAX;

std::list< Ogre::RaySceneQueryResultEntry >::iterator rayIterator; for ( rayIterator = result.begin( ); rayIterator != result.end( ); rayIterator++ ) {

if ( ( *rayIterator ).movable->getUserObject( ) != NULL ) {

if ( ( *rayIterator ).distance < closestDistance ) {

closestObject = ( *rayIterator ).movable; closestDistance = ( *rayIterator ).distance; } } }

// No object clicked

if ( closestObject == NULL ) {

clickedObject = NULL; ---- clickedObject is a class scoped variable } else {

clickedObject = static_cast<

object* >( closestObject->getUserObject( ) ); }

raySceneQuery->clearResults( );

root::getSingleton( ).getSceneManager( )->destroyQuery( raySceneQuery )

如何在两个GUI(用户界面)之间转换(使用透明度)

例如:如果你有一个登陆界面,在成功登陆后,进入了你的用户主界面。你将会想在这两个界面间切换。 ?第一步,加载登陆用户界面。 //First loading with this

mGUIRenderer = new CEGUI::OgreCEGUIRenderer(mWindow, Ogre::RENDER_QUEUE_OVERLAY, false, 3000,mSceneMgr); mGUISystem = new CEGUI::System(mGUIRenderer);

CEGUI::Logger::getSingleton().setLoggingLevel(CEGUI::Informative);

CEGUI::SchemeManager::getSingleton().loadScheme((CEGUI::utf8*)\

mGUISystem->setDefaultMouseCursor((CEGUI::utf8*)\ok\ CEGUI::Font *f =

CEGUI::FontManager::getSingleton().createFont(\.font\

mGUISystem->setDefaultFont(f); //End \ //Load a XML file mEditorGuiSheet =

CEGUI::WindowManager::getSingleton().loadWindowLayout((CEGUI::utf8*)\

mGUISystem->setGUISheet(mEditorGuiSheet); 第二步,如果你想删除并重建一个GUI,你需要做到以下: if(mEditorGuiSheet)

CEGUI::WindowManager::getSingleton().destroyWindow(mEditorGuiSheet);

最后一步,加载其他的GUI mEditorGuiSheet =

CEGUI::WindowManager::getSingleton().loadWindowLayout((CEGUI::utf8*)\

mGUISystem->setGUISheet(mEditorGuiSheet); 重做第二步和最后一步来加载其他GUI。 结论

这个教程为你展示了在Ogre3D下使用CEGUI的一些基本方法,你可以感受下使用CUEGUI编程的乐趣:)


CEGUI教程 - 图文(9).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:新人教版小学数学三年级上册分数的简单计算精品教案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: