CEGUI作用思考

合集下载

guice的能力简述

guice的能力简述

guice的能⼒简述guice这个google出的bean容器框架,ES有⽤到他。

1. 是⼀个bean容器2. 能AOP1. 以module创建injector。

可以看成是⼀个容器。

Module需要⾃定义且继承⾃他的AbstractModule。

覆写config⽅法完成装配关系的确定。

详细参见2. 绑定顶层接⼝到具体实现类。

bind(TransactionLog.class).to(DatabaseTransactionLog.class); ⽀持bind(A).to(B) 然后链式的bind(B).to(C)3. ⽀持在构造函数上打上Inject注解标签,⽤于注⼊字段4. ⽀持⾃定义注解⽤于标志装配⽬标,⽐如⾃定义注解Paypal。

对于加了PayPal注解的参数,注⼊PaypalCreditCardProcessor实现,其余的注⼊GoogleCheckoutProcessor实现。

bind(CreditCardProcessor.class).annotatedWith(PayPal.class).to(PaypalCreditCardProcessor.class);5. 对于加了Named注解其值为testnamed的地⽅注⼊TestNamedCreditCardProcessor实现。

bind(CreditCardProcessor.class).annotatedWith(d("testnamed")).to(TestNamedCreditCardProcessor.class);6. 结合Named注解可以将⼀个参数绑定⼀个特定的instance ⽽不是⼀个实现类。

bind(Integer.class).annotatedWith(d("chargeTimeout")).toInstance(200);7. 可以使⽤Provides注解主动对外提供创建的bean 有点类似 Spring的@Bean注解,这种⽅式可以对bean做⾃定义加⼯。

在游戏中使用CEGUI —— 第一章(底层)

在游戏中使用CEGUI —— 第一章(底层)

在游戏中使用“CEGUI”—第一章(底层)日期:2006/4/13 – 2006/10/10 本文首次刊登于《游戏创造》,现开放与大家共享,转载请注明出处。

作者介绍唐亮(千里马肝),四年游戏从业经验,曾任职于大宇软星科技(上海)有限公司任程序技术指导,现在ATI任Engineer,主要负责XP/Vista下的Display Driver。

迄今为止主要个人作品为《阿猫阿狗2》,参与开发《汉朝与罗马》、《阿猫阿狗大作战OLG》和《仙剑奇侠传4》,主要研究方向为C++、图形渲染技术和系统架构。

blog地址:简介CEGUI(Crazy Eddie’s GUI )是一个自由免费的GUI库,基于LGPL协议,使用C++实现,完全面向对象设计。

CEGUI开发者的目的是希望能够让游戏开发人员从繁琐的GUI实现细节中抽身出来,以便有更多的开发时间可以放在游戏性上。

CEGUI的渲染需要3D图形API的支持,如OpenGL或Direct3D。

另外,使用更高级的图形库也是可以的,像是OGRE、Irrlicht和RenderWare,关键需求可以简化为二点:1.纹理(Texture)的支持2.直接写屏(RHW的顶点格式、正交投影、或者使用shader实现)本文截止日时,CEGUI的最新版本是0.4.1(本文的讨论也是基于此版本),提供了SDK 和全部源码的下载,同时为了适应不同的使用需求,还根据STL的使用区分为Native(VC 自带的P.J. 版STL)和STLport(基于SGI STL实现的跨编译器版本,详细见),以及VC6.0、VC7.0、VC7.1和VC8.0几种。

除此之外,CEGUI还同步提供了官方界面编辑器LayoutEditor,以方便UI的制作,下载地址:/downloads/CELayoutEditorSetup_0.4.1.exe。

作为界面编辑器,它需要系统级界面以提供编辑器操作,在此之前的0.3.0版是基于MFC实现的;而在0.4.1版本中,改为基于wxWidgets(跨平台的本地UI框架,这里的UI指Window操作系统底层,如:Windows、Unix和Mac,详见)实现。

GUI(用户图形界面)

GUI(用户图形界面)

03
减少了程序中的循环和延时操作,提高了 程序的执行效率。
04
方便实现复杂的交互逻辑和动态界面效果。
多任务和多线程
01
并行处理
02 支持多个任务同时运行和处理,提高了程序的并 发性能和响应速度。
03 可以将耗时的任务放在后台线程中执行,避免阻 塞主线程和影响用户体验。
多任务和多线程
• 提供了线程同步和互斥机制,避免多线程并发访问导致的 数据竞争和死锁问题。
重要性
GUI为用户提供了一种直观、易用的操作方式,使得计算机的使用变得更加便捷 和高效。GUI能够降低用户的学习成本,提高工作效率,并增强用户体验。
GUI的历史和发展
历史
GUI的概念起源于20世纪60年代,最早的图形用户界面是SGI公司为斯坦福大学开发的斯坦福大学图形界面 (Stanford Graphics Interface)。随着计算机技术的不断发展,GUI逐渐成为计算机操作系统和应用程序的标 准界面。
娱乐软件
娱乐软件是一类用于休闲和放松的软件,如 音乐播放器、视频播放器等。GUI在娱乐软 件中扮演着重要的角色,提供了简洁、易用 的界面,使用户能够轻松地享受娱乐内容。
嵌入式系统和专用设备
嵌入式系统
嵌入式系统是一类专用的计算机系统,通常 用于控制和管理特定的硬件设备。GUI在嵌 入式系统中起着重要的作用,提供了直观、 易用的界面,使用户能够方便地与设备进行 交互和控制。
错误处理与提示
GUI应具备完善的错误处 理机制和友好的提示信息, 帮助用户快速解决问题。
适应性与兼容性
GUI应具备良好的适应性 与兼容性,支持不同设备 和浏览器的使用,确保用 户体验的一致性。
美观性原则
视觉层次与布局

CEGUI完全使用手册

CEGUI完全使用手册

使用CEGUI步骤:初始化CEGUI(Renderer,system)加载文件(scheme,font,mousecursor)创建CEGUI窗口注入输入事件,添加事件处理函数渲染CEGUI(ogre自动渲染)程序框架:CEGUIBaseApp.h:初始化CEGUICEGUIDemo.h:创建CEGUI窗口CEGUIFrameListener.h:监听器CEGUImain.cpp:创建要显示的窗口/*********************************************************** CEGUIBaseApp.h葛娟<gejuan@>************************************************************/ #ifndef_CEGUIBaseApp_h_#define_CEGUIBaseApp_h_///包含头文件#include<CEGUI/CEGUI.h>#include<OgreCEGUIRenderer.h>#include<Ogre.h>#include"CEGUIFrameListener.h"#include"CEGUIDemo.h "///前向声明class CEGUIDemo;class CEGUIFrameListener;class CEGUIBaseApp{public:CEGUIBaseApp();virtual ~CEGUIBaseApp();//初始化实例并进行渲染virtual bool execute(CEGUIDemo* sampleApp);virtual void cleanup();virtual void setQuitting(bool quit = true) { d_quitting = quit; }virtual bool isQuitting() const { return d_quitting; }protected:bool d_quitting; //程序是否退出bool d_initialised; //是否已经初始化Ogre::Root* d_ogreRoot;Ogre::Camera* d_camera;Ogre::RenderWindow* d_window;CEGUI::OgreCEGUIRenderer* d_renderer;CEGUIFrameListener* d_frameListener;/*------------------------------------------------------------------增加资源组及路径--------------------------------------------------------------------*/void initialiseResources(void);};#endif//end of guard _CEGUIBaseApp_h_/***********************************************************CEGUIBaseApp.cpp葛娟<gejuan@>************************************************************/#include"CEGUIBaseApp.h"//--------------------------------------------------------------------------------------------------------------- void CEGUIBaseApp::initialiseResources(void){using namespace Ogre;ResourceGroupManager& rgm = ResourceGroupManager::getSingleton();// 创建资源组rgm.createResourceGroup("imagesets");rgm.createResourceGroup("fonts");rgm.createResourceGroup("layouts");rgm.createResourceGroup("schemes");rgm.createResourceGroup("looknfeels");ResourceGroupManager::getSingleton().addResourceLocation("ceguifiles/fonts", "FileSystem", "fonts");ResourceGroupManager::getSingleton().addResourceLocation("ceguifiles/imagesets", "FileSystem", "imagesets");ResourceGroupManager::getSingleton().addResourceLocation("ceguifiles/layouts", "FileSystem", "layouts");ResourceGroupManager::getSingleton().addResourceLocation("ceguifiles/looknfeel", "FileSystem", "looknfeels");ResourceGroupManager::getSingleton().addResourceLocation("ceguifiles/schemes", "FileSystem", "schemes");ResourceGroupManager::getSingleton().addResourceLocation("ceguifiles/configs", "FileSystem");ResourceGroupManager::getSingleton().addResourceLocation("ceguifiles/lua_scripts", "FileSystem");}//---------------------------------------------------------------------------------------------------------------------CEGUIBaseApp::CEGUIBaseApp():d_quitting(false),d_ogreRoot(0),d_renderer(0),d_initialised(false),d_frameListener(0){using namespace Ogre;d_ogreRoot = new Root();//创建根initialiseResources();if (d_ogreRoot->showConfigDialog()){d_window = d_ogreRoot->initialise(true,"GeJuan");// 初始化渲染系统,返回自动创建的窗口SceneManager* sm = d_ogreRoot->createSceneManager(ST_GENERIC, "SampleSceneMgr");// 创建场景管理器d_camera = sm->createCamera("SampleCam");// 创建摄像机d_camera->setPosition(Vector3(0,0,500));d_camera->lookAt(Vector3(0,0,-300));d_camera->setNearClipDistance(5);Viewport* vp = d_window->addViewport(d_camera);// 创建占据整个窗口的视口vp->setBackgroundColour(ColourValue(0,0,0));d_camera->setAspectRatio(Real(vp->getActualWidth()) / Real(vp->getActualHeight()));ResourceGroupManager::getSingleton().initialiseAllResourceGroups();// 初始化资源组//CEGUI的初始化///////////////////////////////////////////////////////////////////////////////////d_renderer = new CEGUI::OgreCEGUIRenderer(d_window, RENDER_QUEUE_OVERLAY, false, 0, sm);// 初始化GUInew CEGUI::System(d_renderer);CEGUI::Imageset::setDefaultResourceGroup("imagesets");CEGUI::Font::setDefaultResourceGroup("fonts");CEGUI::Scheme::setDefaultResourceGroup("schemes");CEGUI::WidgetLookManager::setDefaultResourceGroup("looknfeels");CEGUI::WindowManager::setDefaultResourceGroup("layouts");CEGUI::ScriptModule::setDefaultResourceGroup("lua_scripts");// 创建帧监听器d_frameListener= new CEGUIFrameListener(this, d_window, d_camera);d_ogreRoot->addFrameListener(d_frameListener);d_initialised = true;}else{delete d_ogreRoot;d_ogreRoot = 0;}}//-------------------------------------------------------------------------------------------------------- CEGUIBaseApp::~CEGUIBaseApp(){delete d_frameListener;delete CEGUI::System::getSingletonPtr();delete d_renderer;delete d_ogreRoot;}//-------------------------------------------------------------------------------------------------------------- bool CEGUIBaseApp::execute(CEGUIDemo* sampleApp){if (d_ogreRoot && d_initialised){sampleApp->initialiseSample();// 通过Ogre3D 渲染try{d_ogreRoot->startRendering();}catch(Ogre::Exception&){return false;}catch(CEGUI::Exception&){return false;}return true;}else{return false;}}//----------------------------------------------------------------------------------------------------- void CEGUIBaseApp::cleanup(){}Demo1:Demo2:Demo3:代码创建窗口#include"CEGUIDemo.h "using namespace CEGUI;//----------------------------------------------------------------------class CEGUIDemoApp:public CEGUIDemo{public:bool initialiseSample(){WindowManager& winMgr = WindowManager::getSingleton();SchemeManager::getSingleton().loadScheme("TaharezLook.scheme");System::getSingleton().setDefaultMouseCursor("TaharezLook", "MouseArrow");FontManager::getSingleton().createFont("Commonwealth-10.font");ImagesetManager::getSingleton().createImagesetFromImageFile("BackgroundImage", "GPN-2000-001437.tga");Window* background = winMgr.createWindow("TaharezLook/StaticImage", "root_wnd");background->setPosition(UVector2(cegui_reldim(0), cegui_reldim( 0)));background->setSize(UVector2(cegui_reldim(1), cegui_reldim( 1)));background->setProperty("FrameEnabled", "false");background->setProperty("BackgroundEnabled", "false");background->setProperty("Image", "set:BackgroundImage image:full_image");System::getSingleton().setGUISheet(background);createDemoWindows();initDemoEventWiring();return true;}void cleanupSample(){}private:void createDemoWindows(void){ListboxTextItem* itm;WindowManager& winMgr = WindowManager::getSingleton();Window* root = winMgr.getWindow("root_wnd");MultiColumnList* mcl = static_cast<MultiColumnList*>(winMgr.createWindow("TaharezLook/MultiColumnList", "Demo6 root->addChildWindow(mcl);mcl->setPosition(UVector2(cegui_reldim(0.01f), cegui_reldim( 0.1f)));mcl->setSize(UVector2(cegui_reldim(0.5f), cegui_reldim( 0.8f)));FrameWindow* fwnd = static_cast<FrameWindow*>(winMgr.createWindow("TaharezLook/FrameWindow", "Demo6/ControlPan root->addChildWindow(fwnd);fwnd->setPosition(UVector2(cegui_reldim(0.53f), cegui_reldim( 0.03f)));fwnd->setMaxSize(UVector2(cegui_reldim(1.0f), cegui_reldim( 1.0f)));fwnd->setSize(UVector2(cegui_reldim(0.44f), cegui_reldim( 0.94f)));fwnd->setText("Demo 6 - Control Panel");Combobox* cbbo = static_cast<Combobox*>(winMgr.createWindow("TaharezLook/Combobox", "Demo6/ControlPanel/SelMode fwnd->addChildWindow(cbbo);cbbo->setPosition(UVector2(cegui_reldim(0.04f), cegui_reldim( 0.06f)));cbbo->setSize(UVector2(cegui_reldim(0.66f), cegui_reldim( 0.33f)));const CEGUI::Image* sel_img = &ImagesetManager::getSingleton().getImageset("TaharezLook")->getImage("MultiList itm = new ListboxTextItem("Full Row (Single)", 0);itm->setSelectionBrushImage(sel_img);cbbo->addItem(itm);itm = new ListboxTextItem("Full Row (Multiple)", 1);itm->setSelectionBrushImage(sel_img);cbbo->addItem(itm);itm = new ListboxTextItem("Full Column (Single)", 2);itm->setSelectionBrushImage(sel_img);cbbo->addItem(itm);itm = new ListboxTextItem("Full Column (Multiple)", 3);itm->setSelectionBrushImage(sel_img);cbbo->addItem(itm);itm = new ListboxTextItem("Single Cell (Single)", 4);itm->setSelectionBrushImage(sel_img);cbbo->addItem(itm);itm = new ListboxTextItem("Single Cell (Multiple)", 5);itm->setSelectionBrushImage(sel_img);cbbo->addItem(itm);itm = new ListboxTextItem("Nominated Column (Single)", 6);itm->setSelectionBrushImage(sel_img);cbbo->addItem(itm);itm = new ListboxTextItem("Nominated Column (Multiple)", 7);itm->setSelectionBrushImage(sel_img);cbbo->addItem(itm);itm = new ListboxTextItem("Nominated Row (Single)", 8);itm->setSelectionBrushImage(sel_img);cbbo->addItem(itm);itm = new ListboxTextItem("Nominated Row (Multiple)", 9);itm->setSelectionBrushImage(sel_img);cbbo->addItem(itm);cbbo->setReadOnly(true);Window* st = winMgr.createWindow("TaharezLook/StaticText", "Demo6/ControlPanel/ColumnPanel");fwnd->addChildWindow(st);st->setPosition(UVector2(cegui_reldim(0.02f), cegui_reldim( 0.12f)));st->setSize(UVector2(cegui_reldim(0.96f), cegui_reldim( 0.25f)));st->setText("Column Control");st->setProperty("VertFormatting", "TopAligned");Window* label = winMgr.createWindow("TaharezLook/StaticText", "Demo6/ControlPanel/Label1");st->addChildWindow(label);label->setProperty("FrameEnabled", "false");label->setProperty("BackgroundEnabled", "false");label->setPosition(UVector2(cegui_reldim(0.02f), cegui_reldim( 0.2f)));label->setSize(UVector2(cegui_reldim(0.2f), cegui_reldim( 0.12f)));label->setText("ID Code:");label = winMgr.createWindow("TaharezLook/StaticText", "Demo6/ControlPanel/Label2");st->addChildWindow(label);label->setProperty("FrameEnabled", "false");label->setProperty("BackgroundEnabled", "false");label->setPosition(UVector2(cegui_reldim(0.23f), cegui_reldim( 0.2f)));label->setSize(UVector2(cegui_reldim(0.2f), cegui_reldim( 0.12f)));label->setText("Width:");label = winMgr.createWindow("TaharezLook/StaticText", "Demo6/ControlPanel/Label3");st->addChildWindow(label);label->setProperty("FrameEnabled", "false");label->setProperty("BackgroundEnabled", "false");label->setPosition(UVector2(cegui_reldim(0.44f), cegui_reldim( 0.2f)));label->setSize(UVector2(cegui_reldim(0.2f), cegui_reldim( 0.12f)));label->setText("Caption:");PushButton* btn = static_cast<PushButton*>(winMgr.createWindow("TaharezLook/Button", "Demo6/ControlPanel/Column st->addChildWindow(btn);btn->setPosition(UVector2(cegui_reldim(0.81f), cegui_reldim( 0.32f)));btn->setSize(UVector2(cegui_reldim(0.15f), cegui_reldim( 0.2f)));btn->setText("Add");Editbox* ebox = static_cast<Editbox*>(winMgr.createWindow("TaharezLook/Editbox", "Demo6/ControlPanel/ColumnPane st->addChildWindow(ebox);ebox->setPosition(UVector2(cegui_reldim(0.02f), cegui_reldim( 0.32f)));ebox->setSize(UVector2(cegui_reldim(0.2f), cegui_reldim( 0.2f)));ebox->setValidationString("\\d*");ebox = static_cast<Editbox*>(winMgr.createWindow("TaharezLook/Editbox", "Demo6/ControlPanel/ColumnPanel/NewColW st->addChildWindow(ebox);ebox->setPosition(UVector2(cegui_reldim(0.23f), cegui_reldim( 0.32f)));ebox->setSize(UVector2(cegui_reldim(0.2f), cegui_reldim( 0.2f)));ebox->setValidationString("\\d*");ebox = static_cast<Editbox*>(winMgr.createWindow("TaharezLook/Editbox", "Demo6/ControlPanel/ColumnPanel/NewColT st->addChildWindow(ebox);ebox->setPosition(UVector2(cegui_reldim(0.44f), cegui_reldim( 0.32f)));ebox->setSize(UVector2(cegui_reldim(0.36f), cegui_reldim( 0.2f)));ebox->setValidationString(".*");label = winMgr.createWindow("TaharezLook/StaticText", "Demo6/ControlPanel/Label4");st->addChildWindow(label);label->setProperty("FrameEnabled", "false");label->setProperty("BackgroundEnabled", "false");label->setPosition(UVector2(cegui_reldim(0.02f), cegui_reldim( 0.55f)));label->setSize(UVector2(cegui_reldim(0.2f), cegui_reldim( 0.12f)));label->setText("ID Code:");ebox = static_cast<Editbox*>(winMgr.createWindow("TaharezLook/Editbox", "Demo6/ControlPanel/ColumnPanel/DelColI st->addChildWindow(ebox);ebox->setPosition(UVector2(cegui_reldim(0.02f), cegui_reldim( 0.67f)));ebox->setSize(UVector2(cegui_reldim(0.2f), cegui_reldim( 0.2f)));ebox->setValidationString("\\d*");btn = static_cast<PushButton*>(winMgr.createWindow("TaharezLook/Button", "Demo6/ControlPanel/ColumnPanel/DelCol st->addChildWindow(btn);btn->setPosition(UVector2(cegui_reldim(0.25f), cegui_reldim( 0.67f)));btn->setSize(UVector2(cegui_reldim(0.4f), cegui_reldim( 0.2f)));btn->setText("Delete Column");st = winMgr.createWindow("TaharezLook/StaticText", "Demo6/ControlPanel/RowControl");fwnd->addChildWindow(st);st->setPosition(UVector2(cegui_reldim(0.02f), cegui_reldim( 0.38f)));st->setSize(UVector2(cegui_reldim(0.96f), cegui_reldim( 0.25f)));st->setText("Row Control");st->setProperty("VertFormatting", "TopAligned");label = winMgr.createWindow("TaharezLook/StaticText", "Demo6/ControlPanel/Label5");st->addChildWindow(label);label->setProperty("FrameEnabled", "false");label->setProperty("BackgroundEnabled", "false");label->setPosition(UVector2(cegui_reldim(0.02f), cegui_reldim( 0.2f)));label->setSize(UVector2(cegui_reldim(0.2f), cegui_reldim( 0.12f)));label->setText("Col ID:");label = winMgr.createWindow("TaharezLook/StaticText", "Demo6/ControlPanel/Label6");st->addChildWindow(label);label->setProperty("FrameEnabled", "false");label->setProperty("BackgroundEnabled", "false");label->setPosition(UVector2(cegui_reldim(0.23f), cegui_reldim( 0.2f)));label->setSize(UVector2(cegui_reldim(0.55f), cegui_reldim( 0.12f)));label->setText("Item Text:");ebox = static_cast<Editbox*>(winMgr.createWindow("TaharezLook/Editbox", "Demo6/ControlPanel/ColumnPanel/RowColI st->addChildWindow(ebox);ebox->setPosition(UVector2(cegui_reldim(0.02f), cegui_reldim( 0.32f)));ebox->setSize(UVector2(cegui_reldim(0.2f), cegui_reldim( 0.2f)));ebox->setValidationString("\\d*");ebox = static_cast<Editbox*>(winMgr.createWindow("TaharezLook/Editbox", "Demo6/ControlPanel/ColumnPanel/RowText st->addChildWindow(ebox);ebox->setPosition(UVector2(cegui_reldim(0.23f), cegui_reldim( 0.32f)));ebox->setSize(UVector2(cegui_reldim(0.55f), cegui_reldim( 0.2f)));ebox->setValidationString(".*");btn = static_cast<PushButton*>(winMgr.createWindow("TaharezLook/Button", "Demo6/ControlPanel/ColumnPanel/AddRow st->addChildWindow(btn);btn->setPosition(UVector2(cegui_reldim(0.81f), cegui_reldim( 0.32f)));btn->setSize(UVector2(cegui_reldim(0.15f), cegui_reldim( 0.2f)));btn->setText("Add");label = winMgr.createWindow("TaharezLook/StaticText", "Demo6/ControlPanel/Label7");st->addChildWindow(label);label->setProperty("FrameEnabled", "false");label->setProperty("BackgroundEnabled", "false");label->setPosition(UVector2(cegui_reldim(0.02f), cegui_reldim( 0.55f)));label->setSize(UVector2(cegui_reldim(0.2f), cegui_reldim( 0.12f)));label->setText("Row Idx:");ebox = static_cast<Editbox*>(winMgr.createWindow("TaharezLook/Editbox", "Demo6/ControlPanel/ColumnPanel/DelRowI st->addChildWindow(ebox);ebox->setPosition(UVector2(cegui_reldim(0.02f), cegui_reldim( 0.67f)));ebox->setSize(UVector2(cegui_reldim(0.2f), cegui_reldim( 0.2f)));ebox->setValidationString("\\d*");btn = static_cast<PushButton*>(winMgr.createWindow("TaharezLook/Button", "Demo6/ControlPanel/ColumnPanel/DelRowst->addChildWindow(btn);btn->setPosition(UVector2(cegui_reldim(0.25f), cegui_reldim( 0.67f)));btn->setSize(UVector2(cegui_reldim(0.4f), cegui_reldim( 0.2f)));btn->setText("Delete Row");st = winMgr.createWindow("TaharezLook/StaticText", "Demo6/ControlPanel/SetItemPanel");fwnd->addChildWindow(st);st->setPosition(UVector2(cegui_reldim(0.02f), cegui_reldim( 0.65f)));st->setSize(UVector2(cegui_reldim(0.96f), cegui_reldim( 0.25f)));st->setText("Item Modification");st->setProperty("VertFormatting", "TopAligned");label = winMgr.createWindow("TaharezLook/StaticText", "Demo6/ControlPanel/Label8");st->addChildWindow(label);label->setProperty("FrameEnabled", "false");label->setProperty("BackgroundEnabled", "false");label->setPosition(UVector2(cegui_reldim(0.02f), cegui_reldim( 0.2f)));label->setSize(UVector2(cegui_reldim(0.2f), cegui_reldim( 0.12f)));label->setText("Row Idx:");label = winMgr.createWindow("TaharezLook/StaticText", "Demo6/ControlPanel/Label9");st->addChildWindow(label);label->setProperty("FrameEnabled", "false");label->setProperty("BackgroundEnabled", "false");label->setPosition(UVector2(cegui_reldim(0.23f), cegui_reldim( 0.2f)));label->setSize(UVector2(cegui_reldim(0.2f), cegui_reldim( 0.12f)));label->setText("Col ID:");label = winMgr.createWindow("TaharezLook/StaticText", "Demo6/ControlPanel/Label10");st->addChildWindow(label);label->setProperty("FrameEnabled", "false");label->setProperty("BackgroundEnabled", "false");label->setPosition(UVector2(cegui_reldim(0.44f), cegui_reldim( 0.2f)));label->setSize(UVector2(cegui_reldim(0.2f), cegui_reldim( 0.12f)));label->setText("Item Text:");ebox = static_cast<Editbox*>(winMgr.createWindow("TaharezLook/Editbox", "Demo6/ControlPanel/ColumnPanel/SetItem st->addChildWindow(ebox);ebox->setPosition(UVector2(cegui_reldim(0.02f), cegui_reldim( 0.32f)));ebox->setSize(UVector2(cegui_reldim(0.2f), cegui_reldim( 0.2f)));ebox->setValidationString("\\d*");ebox = static_cast<Editbox*>(winMgr.createWindow("TaharezLook/Editbox", "Demo6/ControlPanel/ColumnPanel/SetItem st->addChildWindow(ebox);ebox->setPosition(UVector2(cegui_reldim(0.23f), cegui_reldim( 0.32f)));ebox->setSize(UVector2(cegui_reldim(0.2f), cegui_reldim( 0.2f)));ebox->setValidationString("\\d*");ebox = static_cast<Editbox*>(winMgr.createWindow("TaharezLook/Editbox", "Demo6/ControlPanel/ColumnPanel/SetItem st->addChildWindow(ebox);ebox->setPosition(UVector2(cegui_reldim(0.44f), cegui_reldim( 0.32f)));ebox->setSize(UVector2(cegui_reldim(0.36f), cegui_reldim( 0.2f)));ebox->setValidationString(".*");btn = static_cast<PushButton*>(winMgr.createWindow("TaharezLook/Button", "Demo6/ControlPanel/ColumnPanel/SetIt st->addChildWindow(btn);btn->setPosition(UVector2(cegui_reldim(0.81f), cegui_reldim( 0.32f)));btn->setSize(UVector2(cegui_reldim(0.15f), cegui_reldim( 0.2f)));btn->setText("Set");label = winMgr.createWindow("TaharezLook/StaticText", "Demo6/ControlPanel/RowCount");st->addChildWindow(label);label->setProperty("FrameEnabled", "false");label->setProperty("BackgroundEnabled", "false");label->setPosition(UVector2(cegui_reldim(0.02f), cegui_reldim( 0.55f)));label->setSize(UVector2(cegui_reldim(1.0f), cegui_reldim( 0.12f)));label->setText("Current Row Count:");label = winMgr.createWindow("TaharezLook/StaticText", "Demo6/ControlPanel/ColCount");st->addChildWindow(label);label->setProperty("FrameEnabled", "false");label->setProperty("BackgroundEnabled", "false");label->setPosition(UVector2(cegui_reldim(0.02f), cegui_reldim( 0.67f)));label->setSize(UVector2(cegui_reldim(1.0f), cegui_reldim( 0.12f)));label->setText("Current Column Count:");label = winMgr.createWindow("TaharezLook/StaticText", "Demo6/ControlPanel/SelCount");st->addChildWindow(label);label->setProperty("FrameEnabled", "false");label->setProperty("BackgroundEnabled", "false");label->setPosition(UVector2(cegui_reldim(0.02f), cegui_reldim( 0.79f)));label->setSize(UVector2(cegui_reldim(1.0f), cegui_reldim( 0.12f)));label->setText("Current Selected Count:");btn = static_cast<PushButton*>(winMgr.createWindow("TaharezLook/Button", "Demo6/QuitButton"));fwnd->addChildWindow(btn);btn->setPosition(UVector2(cegui_reldim(0.25f), cegui_reldim( 0.93f)));btn->setSize(UVector2(cegui_reldim(0.50f), cegui_reldim( 0.05f)));btn->setText("Quit This Demo!");}void initDemoEventWiring(void){WindowManager& winMgr = WindowManager::getSingleton();winMgr.getWindow("Demo6/ControlPanel/ColumnPanel/AddColButton")->subscribeEvent(PushButton::EventClicked, Event::Subscriber(&CEGUIDemoApp::handleAddColumn, this));winMgr.getWindow("Demo6/ControlPanel/ColumnPanel/DelColButton")->subscribeEvent(PushButton::EventClicked, Event::Subscriber(&CEGUIDemoApp::handleDeleteColumn, this));winMgr.getWindow("Demo6/ControlPanel/ColumnPanel/AddRowButton")->subscribeEvent(PushButton::EventClicked, Event::Subscriber(&CEGUIDemoApp::handleAddRow, this));winMgr.getWindow("Demo6/ControlPanel/ColumnPanel/DelRowButton")->subscribeEvent(PushButton::EventClicked, Event::Subscriber(&CEGUIDemoApp::handleDeleteRow, this));winMgr.getWindow("Demo6/ControlPanel/ColumnPanel/SetItemButton")->subscribeEvent(PushButton::EventClicked, Event::Subscriber(&CEGUIDemoApp::handleSetItem, this));winMgr.getWindow("Demo6/QuitButton")->subscribeEvent(PushButton::EventClicked, Event::Subscriber(&CEGUIDemoApp::handleQuit, this));winMgr.getWindow("Demo6/ControlPanel/SelModeBox")->subscribeEvent(Combobox::EventListSelectionAccepted, Event::Subscriber(&CEGUIDemoApp::handleSelectModeChanwinMgr.getWindow("Demo6/MainList")->subscribeEvent(MultiColumnList::EventSelectionChanged, Event::Subscriber(&CEGUIDemoApp::handleSelectChangewinMgr.getWindow("Demo6/MainList")->subscribeEvent(MultiColumnList::EventListContentsChanged, Event::Subscriber(&CEGUIDemoApp::handleContentsC }//--------------事件处理函数-----------------------------------------------------------------------bool handleQuit(const CEGUI::EventArgs& e){d_sampleApp->setQuitting();return true;}bool handleAddColumn(const CEGUI::EventArgs& e){MultiColumnList* mcl = static_cast<MultiColumnList*>(WindowManager::getSingleton().getWindow("Demo6/MainList") Editbox* idbox = static_cast<Editbox*>(WindowManager::getSingleton().getWindow("Demo6/ControlPanel/ColumnPanel/ Editbox* widthbox = static_cast<Editbox*>(WindowManager::getSingleton().getWindow("Demo6/ControlPanel/ColumnPanEditbox* textbox = static_cast<Editbox*>(WindowManager::getSingleton().getWindow("Demo6/ControlPanel/ColumnPaneCEGUI::uint id = atoi(idbox->getText().c_str());float width = atof(widthbox->getText().c_str());String text = textbox->getText();//idbox->setText("");//widthbox->setText("");//textbox->setText("");if (width < 10.0f)width = 10.0f;mcl->addColumn(text, id, cegui_absdim(width));return true;}bool handleDeleteColumn(const CEGUI::EventArgs& e){MultiColumnList* mcl = static_cast<MultiColumnList*>(WindowManager::getSingleton().getWindow("Demo6/MainList") Editbox* idbox = static_cast<Editbox*>(WindowManager::getSingleton().getWindow("Demo6/ControlPanel/ColumnPanel/CEGUI::uint id = atoi(idbox->getText().c_str());try{mcl->removeColumnWithID(id);}catch (InvalidRequestException){}//idbox->setText("");return true;}bool handleAddRow(const CEGUI::EventArgs& e){MultiColumnList* mcl = static_cast<MultiColumnList*>(WindowManager::getSingleton().getWindow("Demo6/MainList") Editbox* idbox = static_cast<Editbox*>(WindowManager::getSingleton().getWindow("Demo6/ControlPanel/ColumnPanel/ Editbox* textbox = static_cast<Editbox*>(WindowManager::getSingleton().getWindow("Demo6/ControlPanel/ColumnPaneCEGUI::uint id = atoi(idbox->getText().c_str());String text = textbox->getText();//idbox->setText("");//textbox->setText("");ListboxTextItem* item = new ListboxTextItem(text);item->setSelectionBrushImage(&ImagesetManager::getSingleton().getImageset("TaharezLook")->getImage("MultiListStry{mcl->addRow(item, id);//?????????????????????????????????????}catch (InvalidRequestException){delete item;}return true;}bool handleDeleteRow(const CEGUI::EventArgs& e){MultiColumnList* mcl = static_cast<MultiColumnList*>(WindowManager::getSingleton().getWindow("Demo6/MainList") Editbox* idxbox = static_cast<Editbox*>(WindowManager::getSingleton().getWindow("Demo6/ControlPanel/ColumnPanelCEGUI::uint idx = atoi(idxbox->getText().c_str());try{mcl->removeRow(idx);}catch (InvalidRequestException){}//idxbox->setText("");return true;}bool handleSetItem(const CEGUI::EventArgs& e){MultiColumnList* mcl = static_cast<MultiColumnList*>(WindowManager::getSingleton().getWindow("Demo6/MainList") Editbox* idbox = static_cast<Editbox*>(WindowManager::getSingleton().getWindow("Demo6/ControlPanel/ColumnPanel/ Editbox* rowbox = static_cast<Editbox*>(WindowManager::getSingleton().getWindow("Demo6/ControlPanel/ColumnPane Editbox* textbox = static_cast<Editbox*>(WindowManager::getSingleton().getWindow("Demo6/ControlPanel/ColumnPaneCEGUI::uint id = atoi(idbox->getText().c_str());CEGUI::uint row = atoi(rowbox->getText().c_str());String text = textbox->getText();//idbox->setText("");。

eCognition简要介绍

eCognition简要介绍

u为影像区域整体紧致度; v为影像区域边界光滑度; E为影像区域实际的边界长 度;
N为影像区域的像元总数; L为包含影像区域范围的矩 形边界总长度
E为区域A的红色边界的长度 L为青色矩形的周长 N为区域A所包含的像素数 紧致度u衡量区域的饱满程度 光滑度v衡量区域边界的光滑(破碎)程度
合并后的区域异质性计算[4]
EC软件操作实验
面向对象分类(基于规则) 面向对象分类(基于样本)
基本概念[1]
基本概念[1]
分割 VS 分类
分割:cut the image into pieces for further analysis
分类:label these objects according to their attributes
分类精度得到保障
对象能够准确反映地物的真实边界、轮廓信息,从而从根本上减少错 分、漏分的几率,同时能有效避免椒盐现象
分割尺度可控
针对不同地物目标的提取需求,可灵活控制分割尺度,满足多尺度分 割分类要求
多尺度分割思想[3]
多尺度分割(异质性最小的区域合并算法[4])
区域异质性f
光谱异质性x(画图) n x pii i 1
形状异质性y(画图)
w1为光谱权值,x为光谱异 质性,y为形状异质性
w2为紧致度的权重; u为影像区域整体紧致度; v为影像区域边界光滑度; E为影像区域实际的边界长 度;N为影像区域的像元总 数;L为包含影像区域范围 的矩形边界总长度
形状参数(紧致度&光滑度)
Y_min
S
X_min
Y_max X_max
对象(子对象,父对象,相邻对象)
对象:包含状态(数据)和行为(操作)的集合体,用来描述真实世界的 (物理或逻辑概念上的)物体。

Acegi 知识点文档

Acegi 知识点文档

中国数码技术研发中心
中国数码技术研发中心
Acegi 主要功能 - 域对象许可
中国数码技术研发中心
Acegi 配置

<filter> <filter-name>Acegi Filter Chain Proxy</filter-name> <filter-class> org.acegisecurity.util.FilterToBeanProxy </filter-class> <init-param> <param-name>targetClass</param-name> <param-value> org.acegisecurity.util.FilterChainProxy </param-value> </init-param> </filter> <filter-mapping> <filter-name>Acegi Filter Chain Proxy</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
Acegi 概要

用于 Spring 的安全框架 认证和授权机制 耶鲁单点登陆 X509 认证 Channel Security 频道安全管理
中国数码技术研发中心
Acegi 安全控制粒度

URL 资源访问控制
http://apps:8080/index.htm -> for public http://apps:8080/user.htm -> for authorized user

基于CEGUI的游戏图形用户界面的开发

基于CEGUI的游戏图形用户界面的开发
C E G U I : : S c h e me Ma n a g e r : : g e t S i n g l e t o n ( ) . c r e a t e F r o mF i l e ( ” T a h a r e z L o o k . s c h e m e ” ) ; C E GU I : : F o n t Ma n a g e r : : g e t S i n g l e t o n ( ) . c r e a t e F r o mF i l e ( ” D e j a V u S a n s 一 1 0 . f o n t ” ) ; 2 . 2 设 置 资 源 组 目录

r p
( C E G UI : : S y s t e m: : g e t S i n g l e t o n 0 . g e t R e s o u r c e P r o V i d e r ( ) ) ;
r 1 ) 一 > s e t R e s o u r c e Gr o u p D i r e c t o r y ( ” s c h e me s ” , ” . . / d a t a i f l e s / s c h e me s / ” ) ;
G r a p h i c Us e r I n t e r f a c e ) 是 一个 用 c + + 实现 的 、面 向对 象 的免 费图形 用户 界面库 ,它 为游 戏开发 者提 供 3 D环
境 的 窗 口及 部件 图形 AP I ,能 使开 发人 员从 繁琐 的 G UI 实现 细节 中解 放 出来 ,将 更多 开发 时 间用 在游 戏性
系统 中用于指 示各种 资 源组所 在 的 目录和设 置默 认资源 组 的代 码 如下 :

游戏开发中 的 CEGUI 应用

游戏开发中 的 CEGUI 应用

计 算 机 系 统 应 用 2010 年 第 19 卷 第1期36 研究开发 R es earch Devel op ment基于CEGUI 的界面框架设计与实现①黄伟强 1 夏科艺2 (1 华南师范大学 网络中心 广东 广州 510631;2 广州博冠信息科技有限公司 广东 广州 510665)摘 要: 通过对界面开发库CEGUI(Crazy Eddie’s GUI)的研究基础上,采用归纳与总结、流程优化及代码与框架重构的思想实现对CEGUI 界面库的p ython 脚本封装,形成框架而进行界面开发,并以此框架开发界面编辑器,实现对界面开发流程优化,降低界面开发成本以及提高界面开发效率。

通过游戏界面开发框架脚本化,对产品开发起到良好的促进作用。

关键词: 界面开发 封装 框架 CEGUI python 编辑器Design and Implementation of User Interface Framework Based on CEGUIHUANG Wei-Qiang 1, XIA Ke-Yi 2(1.Center of Netw ork,Sou th C hina Normal University, Guangzhou 510631, C hina;2.B oguan Tenglong Information Tech Ltd, Guangzhou 510665, C hina)Abstract : Through applying the CEGUI(Crazy Eddie's GUI )user interface LIB research, this paper accomplishes theCEGUI’s python encapsulation by using induction, f low optimization and f rame Refactoring. User interface development and User interf ace editor can use this CEGUI python f rame to build, optimize the developing f low , reduce the cost of User interf ace development and improve eff i ciency.Keywords: UI development; encapsulation; f ram e; CEGUI; python; UI editor1 引言目前游戏业已经形成一个发展快速的产业链,游戏产品层出不穷,市场需求巨大,而作为游戏产品重要的界面开发往往对游戏产品质量起到重要作用。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

CEGUI的重要作用在于:
嵌套!
这只是我的一种假设,还没有实际操作的经验,
但是问过大牛,他们回答是嵌入其他引擎或工具中不难。

现在我的第一目标就是先完成嵌套,主要以下步骤来实施:
制定方案(尝试方案)如下:
a、利用CEGUI创建简单Window窗口
b、在窗口上,创建简单按钮
c、将创建按钮方法嵌入我们引擎中
目标是测试CEGUI是否可嵌入及嵌入难度
在我看来,
CEGUI关心的不主窗口创建、消息机制、渲染,
它关心的是UI表现及逻辑实现,
所以这样的东西,如何嵌入就应该是第一目标。

为什么不用MFC,或者游戏引擎自带UI?
1、MFC自身是UI工具,如果说应用程序的一套东西都是由自身开发倒没问题,
但是要将做的东西嵌入其他应用程序中,可能就比较麻烦。

理由:
1、消息机制处理问题,MFC自成一套消息系统,如果嵌入其他引擎,消息系统处理流程不同,可能会比较麻烦.
暂时只想到这个理由,不过凭我的感觉,应该是比较麻烦的,如有不对,欢迎指正^^。

总结:MFC之类的工具嵌入其他程序困难。

2、为什么不用游戏引擎自带UI系统
理由:
1、CEGUI专业,如果只是一般的游戏引擎自带UI系统,我想不一定会比CEGUI好,不然也不会这么多人肯定它的存在了^^,
最后全面总结:
CEGUI多用于嵌入式开发中,一般用在中低档的引擎里,应该还是合适的。

相关文档
最新文档