当前位置: 首页 > news >正文

[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)
{

}


项目运行截图:

 





 

相关文章:

  • 巧用 TypeScript (一)
  • 谁在使用MongoDB
  • 精选Excel之Ctrl+26字母快捷键,职场办公人员必会!
  • mac下搭建java开发环境:eclipse+tomcat+maven
  • 分布式id生成
  • Android Day1
  • 插件和目标
  • 云信IMweb端开发总结
  • 数字转换为壹仟贰佰叁拾肆的Java方法
  • webgl学习,知识储备
  • 记录一下自己的xen迁移过程
  • 10.9PMP每日一题
  • 利用汇编查看C++函数调用
  • Vue 重置组件到初始状态
  • Vue 学习笔记 (三) -- VueCli 3 项目配置
  • Android Volley源码解析
  • ECS应用管理最佳实践
  • HTML5新特性总结
  • Linux各目录及每个目录的详细介绍
  • node-sass 安装卡在 node scripts/install.js 解决办法
  • Python学习之路16-使用API
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 免费小说阅读小程序
  • 微信支付JSAPI,实测!终极方案
  • kubernetes资源对象--ingress
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • #if #elif #endif
  • #Java第九次作业--输入输出流和文件操作
  • #Linux(帮助手册)
  • (十五)使用Nexus创建Maven私服
  • (转载)Linux 多线程条件变量同步
  • (转载)利用webkit抓取动态网页和链接
  • .NET使用HttpClient以multipart/form-data形式post上传文件及其相关参数
  • /proc/vmstat 详解
  • ?php echo ?,?php echo Hello world!;?
  • @Bean注解详解
  • @kafkalistener消费不到消息_消息队列对战之RabbitMq 大战 kafka
  • [2016.7.Test1] T1 三进制异或
  • [202209]mysql8.0 双主集群搭建 亲测可用
  • [android] 天气app布局练习
  • [Android]如何调试Native memory crash issue
  • [BetterExplained]书写是为了更好的思考(转载)
  • [C++] Boost智能指针——boost::scoped_ptr(使用及原理分析)
  • [GN] Vue3.2 快速上手 ---- 核心语法2
  • [GN] Vue3快速上手1
  • [JS真好玩] 掘金创作者必备: 监控每天是谁取关了你?
  • [Kubernetes]4. 借助腾讯云TKE快速创建Pod、Deployment、Service部署k8s项目
  • [leveldb] 2.open操作介绍
  • [Linux_IMX6ULL应用开发]-Makefile
  • [nlp] id2str的vocab.json转换为str2id
  • [node] Node.js的Web 模块
  • [Python从零到壹] 六十三.图像识别及经典案例篇之图像漫水填充分割应用
  • [QT]加快qt编译:设置默认多核编译qt
  • [RK-Linux] 移植Linux-5.10到RK3399(一)| 搭建系统并让系统跑起来
  • [rust] 11 所有权