【发布时间】:2016-08-08 14:21:48
【问题描述】:
所以我得到了这个代码:
void Engine::Run() {
// initialize all components
if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_JOYSTICK))
throw Exception("couldn't initialize SDL\n" + string(SDL_GetError()), 1);
// other code
run = true;
SDL_Event event;
while (run) {
// other code
uint32 timeout = SDL_GetTicks() + 50;
while (SDL_PollEvent(&event) && timeout - SDL_GetTicks() > 0)
HandleEvent(event);
}
}
void Engine::HandleEvent(const SDL_Event& event) {
switch (event.type) {
case SDL_KEYDOWN:
inputSys->KeyDownEvent(event.key);
break;
case SDL_KEYUP:
inputSys->KeyUpEvent(event.key);
break;
case SDL_JOYBUTTONDOWN:
cout << "button" << endl;
break;
case SDL_JOYHATMOTION:
cout << "hat" << endl;
break;
case SDL_JOYAXISMOTION:
cout << "axis" << endl;
break;
case SDL_JOYDEVICEADDED: case SDL_JOYDEVICEREMOVED:
inputSys->UpdateControllers();
break;
// other code
}
}
问题是唯一没有被调用的事件是操纵杆按钮、帽子和轴事件。其他两个与操纵杆相关的事件工作正常。
我在另一个项目中使用完全相同的代码,其中所有操纵杆事件都被调用而没有问题,但是由于我将代码移到了我的新项目中,它们不再被调用。
SDL 可以识别插入的控制器,我可以使用 SDL_JoystickGetAxis 之类的函数,但由于某种原因,这三个事件似乎不起作用。知道这是为什么吗?
【问题讨论】: