【发布时间】:2017-08-23 22:20:43
【问题描述】:
我正在为一个项目创建一个游戏引擎,并使用 SDL 进行输入和其他内容。
我有这样的事情:
class CInput
{
public:
CInput();
Rect MousePosition = Rect(0, 0);
Rect MouseDeltaPosition = Rect(0, 0);
bool GetMouseButton(int button);
bool Process();
private:
bool _mouseButtons[5];
};
bool CInput::GetMouseButton(int button)
{
return _mouseButtons[button - 1];
}
rect结构是这样的:
struct Rect
{
int x, y;
Rect(int x, int y) : x(x), y(y) {};
};
我正在记录鼠标按钮和移动以用于任何实际用途,但似乎当我设置 mouseposition/mousedeltaposition 时它“溢出”到 _mouseButtons 数组上?
这是我的输入捕获:
while (SDL_PollEvent(&event))
{
switch (event.type)
{
case SDL_MOUSEMOTION:
MousePosition = Rect(event.motion.x, event.motion.y);
MouseDeltaPosition = Rect(event.motion.xrel, event.motion.yrel);
break;
case SDL_MOUSEBUTTONDOWN:
_mouseButtons[event.button.button - 1] = true;
break;
case SDL_MOUSEBUTTONUP:
_mouseButtons[event.button.button - 1] = false;
break;
case SDL_QUIT:
return 0;
}
}
在测试期间,即使没有人按下按钮,_mouseButton 数组也可以填充 255。
编辑---
这只是简单地做:Input.GetMouseButton(0) 当鼠标在某个位置时返回 255
!!!我已经缩小了问题的范围,它似乎发生在 DeltaMousePosition.y 为负数时,因为鼠标相对于窗口向上移动!可能是问题
【问题讨论】:
-
它可能 溢出,因为你对编译器撒谎说变量是 const。
-
这是最小的,它是完整的问题......
-
我们很难编译和测试..
-
从字面上看,除了函数名之外,我没有什么能告诉你的了……