SDL Game Development-第四章(2)-输入处理-创建处理类
2014-02-19 16:23
295 查看
SDL Game Development-第四章(2)-输入处理-创建处理类
//update关键,它轮询输入设备,如鼠标、键盘、手柄之类
//clean用于清理所有已初始化的输入设备
//手柄处理讲解略过。鼠标不需要初始化,也不用担心有多个鼠标,只用假设只有一个鼠标输入。
//SDL的鼠标事件
SDL_MouseButtonEvent //按键按下或释放
SDL_MouseMotionEvent //移动
SDL_MouseWheelEvent //滚轮移动
//每一个鼠标事件有一个类型值:
按钮事件:SDL_MOUSEBUTTONDOWN | SDL_MOUSEBUTTONUP
移动事件:SDL_MOUSEMOTION
滚轮事件:SDL_MOUSEWHEEL
1.InputHandler.h中,添加按键状态数组
//private:
std::vector <bool> m_mouseButtonStates; //鼠标状态数组,0左,1中,2右
2.构造函数中,为这个数组赋初始值,初始为false
InputHandler::InputHandler()
{
for(int i=0; i<3; i++)
{
m_mouseButtonStates.push_back(false);
}
}
InputHandler::~InputHandler() {}
3.回到.h中,在类声明之前,声明一个枚举变量
enum mouse_buttons
{
LEFT = 0,
MIDDLE = 1,
RIGHT = 2
};
class InputHandler
4.输入处理中进行轮询,这将替换掉Game中的主循环
5.将TheInputHandler单例化
//.h中
};
typedef InputHandler TheInputHandler;
//.cpp中
#include "Game.h"
InputHandler* InputHandler::s_pInstance = 0;
#include "InputHandler.h"
...
void quit() { m_bRunning = false; }
7.Game.cpp中新的handleEvents()方法:
8.Game::clean()添加:
9.Player::update()中添加按键处理
一、创建输入处理类
//InputHandler.h,同样是单例形式,只能有一个实例在运行//update关键,它轮询输入设备,如鼠标、键盘、手柄之类
//clean用于清理所有已初始化的输入设备
//手柄处理讲解略过。鼠标不需要初始化,也不用担心有多个鼠标,只用假设只有一个鼠标输入。
//SDL的鼠标事件
SDL_MouseButtonEvent //按键按下或释放
SDL_MouseMotionEvent //移动
SDL_MouseWheelEvent //滚轮移动
//每一个鼠标事件有一个类型值:
按钮事件:SDL_MOUSEBUTTONDOWN | SDL_MOUSEBUTTONUP
移动事件:SDL_MOUSEMOTION
滚轮事件:SDL_MOUSEWHEEL
1.InputHandler.h中,添加按键状态数组
//private:
std::vector <bool> m_mouseButtonStates; //鼠标状态数组,0左,1中,2右
2.构造函数中,为这个数组赋初始值,初始为false
InputHandler::InputHandler()
{
for(int i=0; i<3; i++)
{
m_mouseButtonStates.push_back(false);
}
}
InputHandler::~InputHandler() {}
3.回到.h中,在类声明之前,声明一个枚举变量
enum mouse_buttons
{
LEFT = 0,
MIDDLE = 1,
RIGHT = 2
};
class InputHandler
4.输入处理中进行轮询,这将替换掉Game中的主循环
void InputHandler::update() { SDL_Event event; while(SDL_PollEvent(&event)) { if(event.type == SDL_QUIT) { TheGame::Instance()->quit(); } //处理鼠标事件 if(event.type == SDL_MOUSEBUTTONDOWN) { if(event.button.button == SDL_BUTTON_LEFT) m_mouseButtonStates[LEFT] = true; if(event.button.button == SDL_BUTTON_MIDDLE) m_mouseButtonStates[MIDDLE] = true; if(event.button.button == SDL_BUTTON_RIGHT) m_mouseButtonStates[RIGHT] = true; } if(event.type == SDL_MOUSEBUTTONUP) { if(event.button.button == SDL_BUTTON_LEFT) m_mouseButtonStates[LEFT] = false; if(event.button.button == SDL_BUTTON_MIDDLE) m_mouseButtonStates[MIDDLE] = false; if(event.button.button == SDL_BUTTON_RIGHT) m_mouseButtonStates[RIGHT] = false; } }//end while }
5.将TheInputHandler单例化
//.h中
};
typedef InputHandler TheInputHandler;
//.cpp中
#include "Game.h"
InputHandler* InputHandler::s_pInstance = 0;
二、使用这个新类
6.Game.h中包含并添加quit()方法#include "InputHandler.h"
...
void quit() { m_bRunning = false; }
7.Game.cpp中新的handleEvents()方法:
void Game::handleEvents() { /* SDL_Event event; //这个变量放这里合适否?每次循环都会生成这个局部变量 if(SDL_PollEvent(&event)) { switch(event.type) { case SDL_QUIT: m_bRunning = false; //结束循环 break; default: break; } } //事件处理在第4章详细介绍 */ TheInputHandler::Instance()->update(); }
8.Game::clean()添加:
//目前为止还用不上。如果需要对手柄进行处理,则需要 TheInputHandler::Instance()->clean();
9.Player::update()中添加按键处理
//加入鼠标事件,如果左键按下,Player加速开始 if(TheInputHandler::Instance()->getMouseButtonState(LEFT)) { m_acceleration.setX(1); //加速变量X设1 }
相关文章推荐
- SDL Game Development-第四章(2)-输入处理2-处理鼠标移动
- SDL Game Development-第四章(1)-移动
- eclipse中配置server中选择tomcat8无法进行下一步处理 在创建server的时候,选择tomcat8后,server name为空,并且无法手动输入,同时无法进行下一步操作。 解决方
- 第四章:shell处理用户输入
- SDL Game Development-第1章-笔记
- SDL Game Development-第2章-2.剪裁式显示BMP
- C#程序打包与部署,包括处理安装向导中用户输入的参数,创建卸载程序。
- SDL Game Development-第2章-3.利用角色表产生动画
- SDL Game Development-第3章-1.实现游戏对象管理器(1)Working with Game Objects
- Android:创建能输入内容的常见对话框以及使用对话框实现逻辑处理
- 第4章 处理用户输入与显示数据------------(禁止命令输出、lsof命令、关闭文件描述符、创建读取/写入文件描述符)
- 第4章 处理用户输入与显示数据------------(禁止命令输出、lsof命令、关闭文件描述符、创建读取/写入文件描述符)
- SDL Game Development-第2章-4.使用SDL_image库操作更多格式的图片
- 第4章 处理用户输入与显示数据------------(创建本地临时文件、在/temp中创建临时文件、创建临时目录、tee命令)
- UE4编程之C++创建一个FPS工程(一)创建模式&角色&处理输入
- C#程序打包与部署,包括处理安装向导中用户输入的参数,创建卸载程序。
- sas中的sql(6)创建表格、展现表格、插入行、删除行、规定限制条件(constriants)、处理输入错误(undo策略)、update表格、更改列
- SDL Game Development-第2章-1.BMP的原样显示
- 第4章 处理用户输入与显示数据------------(创建本地临时文件、在/temp中创建临时文件、创建临时目录、tee命令)
- 第4章 处理用户输入与显示数据------------(创建本地临时文件、在/temp中创建临时文件、创建临时目录、tee命令)