笑看风云

记录生活中的启迪与感动
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Irrlicht加载地图,和UI处理

Posted on 2010-04-13 10:23  清晨的风  阅读(399)  评论(0)    收藏  举报

版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://noid.blogbus.com/logs/40994221.html

// S1.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <irrlicht.h>
#include <Windows.h>
#pragma comment(lib,"irrlicht.lib")
using namespace irr;
using namespace core;
using namespace video;
using namespace io;
using namespace gui;
IrrlichtDevice *device        = 0;
scene::ISceneNode *node        = 0;
scene::ICameraSceneNode *cnode = 0;
s32 cnt                        = 0;
IGUIListBox *listbox        = 0;
class MyEventReceiver:public IEventReceiver
{
    public:
    virtual bool OnEvent(const SEvent& event)
    {
        if (node!=0 && event.EventType == irr::EET_KEY_INPUT_EVENT &!event.KeyInput.PressedDown)
        {
            switch(event.KeyInput.Key)
            {
            case KEY_KEY_W:{
                core::vector3df v = node->getPosition();
                v.Y = v.Y+15;
                node->setPosition(v);
                cnode->setPosition(v);
                }break;
            case KEY_KEY_S:{
                core::vector3df v = node->getPosition();
                v.Y = v.Y-15;
                node->setPosition(v);
cnode->setPosition(v);
                           }break;
            case KEY_KEY_A:{
                core::vector3df x = node->getPosition();
                x.X = x.X-15;
                node->setPosition(x);
                cnode->setPosition(x);
                           }break;
            case KEY_KEY_D:{
                core::vector3df x = node->getPosition();
                x.X = x.X+15;
                node->setPosition(x);
                cnode->setPosition(x);
                           }break;
            case KEY_KEY_Q:{
                core::vector3df z = node->getPosition();
                z.Z = z.Z+15;
                node->setPosition(z);
                cnode->setPosition(z);
                           }break;
            case KEY_KEY_E:{
                core::vector3df z = node->getPosition();
                z.Z = z.Z-15;
                node->setPosition(z);
                cnode->setPosition(z);
            }break;
            default:break;
            }
            return true;
        }
        if (event.EventType == EET_GUI_EVENT)
        {
            s32 id = event.GUIEvent.Caller->getID();
            IGUIEnvironment *env = device->getGUIEnvironment();
            switch(event.GUIEvent.EventType)
            {
            case EGET_BUTTON_CLICKED:
                switch(id)
                {
                case 101:
                    MessageBox(0,L"技能A",L"技能A",0);
                    break;
                case 102:break;
                    MessageBox(0,L"技能B",L"技能B",0);
                    break;
                default:break;
                }
                break;
            default:break;
            }
        }
        return false;
    }
};
int _tmain(int argc, _TCHAR* argv[])
{
    MyEventReceiver pInput;
    device = createDevice(
        video::EDT_DIRECT3D9,//指定设备
        core::dimension2d<s32>(800,600),//分辨率
        32,   //色深 16 位真彩,32位真彩
        false,//全屏
        false,//模版缓冲区
        false,//是否开启同步,全屏有效
        &pInput);   //时间接受对象,没有就位0
    device->setWindowCaption(L"Irrlicht Engine Demo!");
    video::IVideoDriver  *driver = device->getVideoDriver();    //得到视频指针
    scene::ISceneManager *smgr   = device->getSceneManager();    //得到场景指针
    gui::IGUIEnvironment *env    = device->getGUIEnvironment();    //得到环境指针
    env->addStaticText( //通过图形环境指针添加一个StaticText 控件
        L"StaticText Demo!",  //要显示的内容
        core::rect<s32>(10,10,260,22),
        false,
        false,
        0
        );
    IGUISkin *skin = env->getSkin();
    IGUIFont *font = env->getFont("fontcourier.bmp");
    if (font)
    {
        skin->setFont(font);;
    }
    skin->setFont(env->getBuiltInFont(),EGDF_BUTTON);
    video::ITexture *image=driver->getTexture("1.jpg");//人物头像
    video::ITexture *image1=driver->getTexture("2.jpg");//人物头像
    video::ITexture *image2=driver->getTexture("3.jpg");//人物头像
    env->addImage(image1,core::position2d<s32>(10,30),true,0,-1);
    env->addImage(image2,core::position2d<s32>(250,550),true,0,-1);
    env->addButton(rect<s32>(10,210,110,210+32),0,101,L"!!!!",L"Exits Game");
    env->addButton(rect<s32>(10,250,110,250+32),0,102,L"2222",L"Windows");
    smgr->loadScene("./Map/map.irr");//加载文件地图
    //device->getCursorControl()->setVisible(false);//关闭鼠标显示
    //smgr->addCameraSceneNodeFPS();//添加摄像机,如果需要maya功能的,添加maya类型摄像机
    node = smgr->addSphereSceneNode();//添加一个圆形节点
    node->setPosition(vector3df(0,0,30));//设置显示位置
    node->setMaterialTexture(0,driver->getTexture("1.png"));//添加材质,这里是个树叶
    node->setMaterialFlag(video::EMF_LIGHTING,false);//关闭灯光
    cnode = smgr->addCameraSceneNode();//将球和摄像机绑定,这样就可以实现类似移动场景
    while (device->run())
    if(device->isWindowActive())
    {
        driver->beginScene(true,true,SColor(255,100,101,140));
        smgr->drawAll();
        env->drawAll();
        driver->endScene();
    }
    device->drop();
    return 0;
}