因此,我试图为我在SDL2中制作的辅助项目制作键盘处理程序。在网上搜索了一些帮助之后,这就是我想到的。
bool Keys[322];
void init() override {
for (bool i : Keys) {
i = false;
}
}
void update() override {
if (CRS::event.type == SDL_KEYDOWN) {
Keys[CRS::event.key.keysym.sym] = true;
}
if (CRS::event.type == SDL_KEYUP) {
Keys[CRS::event.key.keysym.sym] = false;
}
if (Keys[SDLK_w]) {
Transform->Velocity.y = 0; //moves the player up
}
}
上面的代码在大多数情况下都可以正常工作,但是只要我尝试使用SDL视为修饰符的任何键(例如,左移,大写锁定,Ctrl,Alt等),就会出现问题。每当我什至触摸这些按钮之一时,都会收到访问冲突读取位置错误。谁能告诉我为什么呢?如果我想使用shift,capslock等功能,该怎么做?
因此,在意识到这可能不是我想要实现我想要的方式并改为使用SDL_GetKeyboardStates函数之后,我决定取消我的代码,它像一种魅力一样工作。