教程地址
Tutorial 2: Creating a Framework and Window
学习记录
上一篇文章 中我们新增了 CInput
和 CGraphics
,但是两个里边都没有实际内容。所以只是填充了框架,而这一篇中我们来完善 CInput
类的分支:CKeyboard
和 CMouse
。
这一篇之后,我们的框架结构如下:
我们的 CKeyboard
用来提供基本的键盘操作,我们会使用一个 keys
数组来保存每一个键位的值。当某个键位按下时,我们更该这个位置的值。除此之外我们需要给出一个或者某个键值的方法,这就是我们这个 Keyboard
类最主要的功能(在原教程中,它的 InputClass
类直接提供了这些方法,但我将其提出作为单独的键盘类使用)。来看看这个类的声明:
1 | class CKeyboard { |
每个按键都有其对应的值,所以我们设定了一个 keys
数组用以保存这个键位是否被按下。Initialize()
这些方法和其他类都一样暂且不提,我们的 Keydown()
和 Keyup()
方法会更新 keys
的值,而 IsKeyDown()
则返回一个布尔值。实现如下:
1 | CKeyboard::CKeyboard() { |
这个也比较简单,然后当我们做完这些后,可以向上给 CInput
中添加内容了。在 CInput
中我们添加了一个 CKeyboard
对象并在 Initialize()
中初始化。
1 | class CInput { |
而再往上一层,我们可以在 CSystem
类的消息处理函数中更新他们对于键盘的操作了。
1 | LRESULT CSystem::MessageHandler(const HWND hwnd, const UINT umsg, const WPARAM wparam, const LPARAM lparam) { |
这样,我们的 CKeyboard
算是完全的添加了进去,接下来看 CMouse
。事实上,DX 中有专门的输入设备 DXInput ,不过我们还没学到。 CMouse
我们暂时只给了获得和设置鼠标位置的方法。
1 | class CMouse { |
初始化那些方法暂且不表。在 SetPos()
中我们设置光标位置,GetPos()
自然就是读取了。我们会在这两个方法里使用 WINAPI 来获得或者设置数据,等到我们接触了 DXInput 之后会将其代替。
1 | void CMouse::SetPos(const unsigned int& x, const unsigned int& y) { |
(关于键盘与鼠标这里,只是暂时的这样封装。之后会用 DXInput 来实现 CInput
这个类。)