[OGRE]看备注学编程(02):打地鼠01-布置场地九只地鼠
项目下载地址:http://download.csdn.net/detail/wxg694175346/6340347
头文件ShrewMouseApplication.h:
#ifndef __ShrewMouseApplication_H__
#define __ShrewMouseApplication_H__ #include "ExampleApplication.h"
class ShrewMouseManager;
class ShrewMouseApplication : public ExampleApplication
{ public:
ShrewMouseApplication(void);
~ShrewMouseApplication(void); protected:
//用于系统回调来创建场景
void createScene(void);
//用于提供框架所需要的FrameListener类型。
virtual void createFrameListener(void); private:
//这里提供一个管理器,用于协调所有的地鼠。
ShrewMouseManager * _miceManager; }; #endif
头文件ShrewMouseFrameListener.h:
#ifndef __ShrewMouseFrameListener_H__
#define __ShrewMouseFrameListener_H__ #include "ExampleFrameListener.h"
#include <sstream>
class ShrewMouseManager;
class ShrewMouseFrameListener: public ExampleFrameListener
{
public:
// Constructor takes a RenderWindow because it uses that to determine input context
ShrewMouseFrameListener(ShrewMouseManager * miceManager, RenderWindow* win, Camera* cam, bool bufferedKeys = false, bool bufferedMouse = false,
bool bufferedJoy = false ); virtual bool processUnbufferedKeyInput(const FrameEvent& evt)
{ if(mKeyboard->isKeyDown(OIS::KC_SPACE))
{
std::stringstream ss;
ss<<this->mCamera->getPosition()<<this->mCamera->getOrientation()<<std::endl;
OutputDebugStringA(ss.str().c_str());
return true;
}
return ExampleFrameListener::processUnbufferedKeyInput(evt); }
private:
ShrewMouseManager * _miceManager; };
#endif
头文件ShrewMouseManager.h:
#ifndef __ShrewMouseManager_H__
#define __ShrewMouseManager_H__
#include <Ogre.h> class ShrewMouseManager
{
public:
ShrewMouseManager(Ogre::SceneManager *sm);
~ShrewMouseManager(void);
protected:
//这里需要一个Ogre3D场景管理器的指针,用于调度游戏空间
Ogre::SceneManager * _sm;
}; #endif
源代码main.cpp:
#include "ShrewMouseApplication.h" #if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
#define WIN32_LEAN_AND_MEAN
#include "windows.h"
#endif #ifdef __cplusplus
extern "C" {
#endif #if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR strCmdLine, INT )
#else
int main(int argc, char **argv)
#endif
{
// 创建应用实例
ShrewMouseApplication app; try {
app.go();
} catch( Exception& e ) {
#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
MessageBox( NULL, e.getFullDescription().c_str(), "An exception has occured!", MB_OK | MB_ICONERROR | MB_TASKMODAL);
#else
std::cerr << "An exception has occured: " << e.getFullDescription();
#endif
} return 0;
} #ifdef __cplusplus
}
#endif
源代码ShrewMouseApplication.cpp:
#include "ShrewMouseApplication.h"
#include "ShrewMouseFrameListener.h"
#include "ShrewMouseManager.h"
using namespace Ogre; ShrewMouseApplication::ShrewMouseApplication(void):_miceManager(NULL)
{ }
ShrewMouseApplication::~ShrewMouseApplication(void)
{
//最后释放地鼠管理器
if(_miceManager)
delete _miceManager;
} void ShrewMouseApplication::createScene(void)
{
//设置场景环境光
mSceneMgr->setAmbientLight(ColourValue(0.5, 0.5, 0.5));
//创建一个灯光
Light* l = mSceneMgr->createLight("MainLight");
//设置灯光位置
l->setPosition(20,80,50);
//设置摄像机位置
mCamera->setPosition(100.0f, 100.0f, 300.0f);
//设置摄像机角度
mCamera->setOrientation(Ogre::Quaternion(Degree(-30), Vector3::UNIT_X));
//创建一个地鼠管理器,并把Ogre3D引擎中场景管理器作为参数提供。
_miceManager = new ShrewMouseManager(mSceneMgr);
}
void ShrewMouseApplication::createFrameListener(void)
{
//把我们自己的FrameListener派生类型提供给Ogre3D图形引擎
mFrameListener= new ShrewMouseFrameListener(_miceManager, mWindow, mCamera);
mRoot->addFrameListener(mFrameListener);
}
源代码ShrewMouseFrameListener.cpp:
#include "ShrewMouseFrameListener.h"
#include "ShrewMouseManager.h" ShrewMouseFrameListener::ShrewMouseFrameListener(ShrewMouseManager * miceManager, RenderWindow* win, Camera* cam, bool bufferedKeys, bool bufferedMouse,
bool bufferedJoy):ExampleFrameListener(win, cam, bufferedKeys, bufferedMouse, bufferedJoy),_miceManager(miceManager)
{
}
源代码ShrewMouseManager.cpp:
#include "ShrewMouseManager.h" ShrewMouseManager::ShrewMouseManager(Ogre::SceneManager * sm):_sm(sm)
{
using namespace Ogre; for(int i=0; i<3; ++i)
{
for(int j =0; j<3; ++j)
{
//采用模型“ogrehead.mesh”,通过场景管理器创建一个实体。
Entity *ent = _sm->createEntity("head"+Ogre::StringConverter::toString(i*10+j*1), "ogrehead.mesh");
//在场景管理器中,找到场景最根部节点的指针。
SceneNode * rsn = _sm->getRootSceneNode();
//在这个节点下创建一个子节点,位置是Ogre::Vector3(100 *i, 0, 100 *j)。
SceneNode * node = rsn->createChildSceneNode(Ogre::Vector3(100 *i, 0, 100 *j));
//把之前建立的实体挂接到这个节点上。
node->attachObject(ent);
}
}
}
ShrewMouseManager::~ShrewMouseManager(void)
{ }
项目运行截图:
[OGRE]看备注学编程(02):打地鼠01-布置场地九只地鼠的更多相关文章
- Asky极简教程:零基础1小时学编程,已更新前8节
Asky极简架构 开源Asky极简架构.超轻量级.高并发.水平扩展.微服务架构 <Asky极简教程:零基础1小时学编程>开源教程 零基础入门,从零开始全程演示,如何开发一个大型互联网系统, ...
- 跟vczh看实例学编译原理——零:序言
在<如何设计一门语言>里面,我讲了一些语言方面的东西,还有痛快的喷了一些XX粉什么的.不过单纯讲这个也是很无聊的,所以我开了这个<跟vczh看实例学编译原理>系列,意在科普一些 ...
- [小北De编程手记] : Lesson 01 玩转 xUnit.Net 之 概述
谈到单元测试,任何一个开发或是测试人员都不会觉得陌生.我想大多数的同学也都是接触过各种单元测试框架.关于单元测试的重要性,应该不会有太多的质疑.这个系列,我向大家介绍一下xUnit.Net的使用.就让 ...
- 并发编程 02—— ConcurrentHashMap
Java并发编程实践 目录 并发编程 01—— ThreadLocal 并发编程 02—— ConcurrentHashMap 并发编程 03—— 阻塞队列和生产者-消费者模式 并发编程 04—— 闭 ...
- [小北De编程手记] : Lesson 01 - Selenium For C# 之 环境搭建
在我看来一个自动化测试平台的构建,是一种很好的了解开发语言,单元测试框架,自动化测试驱动,设计模式等等等的途径.因此,在下选择了自动化测试的这个话题来和大家分享一下本人关于软件开发和自动化测试的认识. ...
- 我教女朋友学编程html系列(7)—Html无序列表、自定义列表、有序列表及常用例子
昨天写的那篇文章<我教女朋友学编程Html系列(6)—Html常用表单控件>,基本上有1000人左右看了,那边文章是我站在前人的肩膀上修改来的,添加了截图和说明,合并了例子,使之更容易被初 ...
- Java匹马行天下之学编程的起点——编程常识知多少
学编程的起点——编程常识知多少 前言: 刚去大学那会,我就知道我被录取的学院是软件学院,还知道一点就是软件学院主要是学电脑的,但具体要学什么其实一无所知.待的时间久了,慢慢的,像“编程”.“软件”.“ ...
- Java匹马行天下之学编程的起点——高级语言大锅烩
学编程的起点——高级语言大锅烩 前言: 学知识前总想说点鸡汤,想喝的朋友就看看,不想喝的就直接看干货吧,就当鸡汤是给我自己喝的. 前段时间在网上看了一句话感觉挺触动我的,我做个分享: 如果你觉得你的祖 ...
- Java匹马行天下之学编程的起点——走进编程的殿堂
学编程的起点——走进编程的殿堂 前言: 知其然,知其所以然,努力固然重要,但是思维的提升会让你事半功倍,我会用我花费时间换来的“思维”带更多的朋友入门,让你们明明白白学编程,学编程,不迷茫. 转变思维 ...
随机推荐
- VS快速定位文件、代码插件——DPack
之前用Myeclipse开发一个Java项目,发现其中“Open Resource”(Ctrl+Shirft+R)的功能比较好用,回到.Net后就找了找VS相应的功能,试了几个后觉得Dpack比较好用 ...
- css元素居中
水平居中 若为行内元素,对其父元素用text-align:center即可: 若为块元素(无浮动),则一般有两种方法可实现对其的水平居中,一为margin:0 auto;二为通过css计算函数calc ...
- Examples_07_06 无法下载android的sdk
在hosts里面配置. 74.125.237.1 dl-ssl.google.com 在AndroidManifest.xml中添加 <uses-feature android:name=&qu ...
- 第二章 控件架构与自定义控件详解 + ListView使用技巧 + Scroll分析
1.Android控件架构下图是UI界面架构图,每个Activity都有一个Window对象,通常是由PhoneWindow类来实现的.PhoneWindow将DecorView作为整个应用窗口的根V ...
- new Option()——实现时间联动
//1.动态创建select function createSelect(){ var mySelect = document.createElement("select"); m ...
- PHP 杂项 函数
安装 杂项函数是 PHP 核心的组成部分.无需安装即可使用这些函数. Runtime 配置 杂项函数的行为受 php.ini 文件中的设置的影响. 杂项配置选项: 名称 默认 描述 可更改 ignor ...
- (四 )Knockout - ViewModel 的使用3 - 对象属性变化的实时更新
ko.observableArray()就可以自动检测属性,其实他只是监控对象,而不是对象中的属性 使用ko.observable()进行处理 DEMO1 实时更新属性 //定义user数据对象 va ...
- c++模板类被继承时他的成员不能被子类看到
c++模板类被继承时他的成员不能被子类看到,必须用限定的符号 this->foo 或者 baseclass::foo,或者using bassclass::foo. msvc不提示错误,gcc ...
- 如何实现一个通用的IHttpHandler 万能的IHttpHandler HttpWebRequest文件上传
昨天遇到一个比较奇怪的需求,大致是需要在服务器上部署一个http服务,但是服务的具体功能不知道,以后在客服端实现.这里介绍一下系统背景,有一个系统运(部署在美国)行了很多年了,给系统产生了很多文件,现 ...
- 读书笔记 -part1
自从毕业以后到现在~看的书是越来越少了 の其实好像貌似从来没有认认真真的看书 除非工作遇到难于解决的问题迫不得已才去翻书看 有些问题也是莫名其妙的就这样解决了 于是乎被人美名其曰“高人”或&quo ...