SDL 输入仅在有时起作用
SDL inputs only working sometimes
我正在 SDL 中试验键盘输入,遇到了一个奇怪的问题。每当我得到输入时,它有时只会输出适当的响应(仅单击 X 有时关闭程序,仅按 1 有时输出"您按下 1"。这是我的主要代码:
#include <iostream>
#include <SDL.h>
#include "Screen.h"
#include "Input.h"
using namespace std;
int main(int argc, char *argv[]) {
Screen screen;
Input input;
if (screen.init() == false) {
cout << "Failure initializing SDL" << endl;
}
while (true) {
if (input.check_event() == "1") {
cout << "You pressed 1" << endl;
} else if (input.check_event() == "quit") {
break;
}
}
SDL_Quit();
return 0;
这是我的输入类:
#include <iostream>
#include <SDL.h>
#include "Input.h"
using namespace std;
string Input::check_event() {
while (SDL_PollEvent(&event)) {
if (event.type == SDL_QUIT) {
return "quit";
}
else if(event.type == SDL_KEYDOWN){
switch(event.key.keysym.sym){
case SDLK_1:
return "1";
}
}
}
return "null";
}
任何帮助将不胜感激!
来自SDL_PollEvent()
的文档:
如果事件不为 NULL,则从队列中删除下一个事件,并且 存储在事件指向的SDL_Event结构中。
分析代码:
if (input.check_event() == "1") {
这会从队列中删除事件,无论它是什么。
} else if (input.check_event() == "quit") {
假设对check_event()
的第一个调用的返回值是"quit",那么这个调用将不会再次返回"quit",因为此信息现在已丢失。
若要解决此问题,请在每个循环迭代中仅调用check_event()
一次,并将结果存储在临时变量中。然后在条件中仅使用该变量:
while (true) {
string event = input.check_event();
if (event == "1") {
cout << "You pressed 1" << endl;
} else if (event == "quit") {
break;
}
}
相关文章:
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- Windows.h 输入在函数之外不起作用
- 为什么给定的代码不适用于所有测试用例?为什么当输入为 7786 时它不起作用?
- 如果我更改函数输入,我的递归不起作用?
- 为什么用于获取有关名称的输入的语法不起作用?
- C++ 对象数组字符串输入在控制台上不起作用
- cin.fail 在输入数字和字母时不起作用
- 为什么当我输入字符时,这个特定的 cin.get() 语句在C++中不起作用?
- 特殊键输入不起作用(输入,backspace,tab等)
- 类中的重载函数(Students())是输出输入的信息,但它不起作用
- Vigenere密码的C++功能有时才起作用(适用于某些输入,跳过其他输入的班次)
- 为什么在参数输入之前将计算放置在代码中时,计算不起作用
- SDL 输入仅在有时起作用
- 使用系统命令时发送输入不起作用
- 检查用户输入是否正确的函数不起作用
- 功能调用不起作用,但控制台仍允许输入
- 输入字母f或任何字母,并像ABC ABCD ABCDE ABCDEF一样cout字母模式,但仅在我按0时起作用
- std :: getline(输入,d.info)不起作用
- cin.clear() 不起作用 - 不读取输入
- ios_base::sync_with_stdio(false) 在来自标准输入的两个输入之间不起作用