c++ - 每次如何使用 SDL_KeyCode 处理按键?
问题描述
每当我按下右箭头键时,我都会尝试在新位置生成一个矩形,我能够获得第一个矩形,但现在卡在第二个矩形。由于这不是 SDL_GetKeyboardState 的情况(在连续按下键时移动矩形),我完全不知道应该如何进行。为矩形创建数组并将其传递给轮询事件?
const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;
SDL_Window *window = NULL;
SDL_Surface *screen = NULL;
SDL_Renderer *renderer;
SDL_Event e;
SDL_Rect one, two;
bool quit = false;
void init(){
SDL_Init(SDL_INIT_VIDEO);
window = SDL_CreateWindow("Testing", SDL_WINDOWPOS_UNDEFINED,
SDL_WINDOWPOS_UNDEFINED,
SCREEN_WIDTH, SCREEN_HEIGHT,
SDL_WINDOW_SHOWN);
renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
screen = SDL_GetWindowSurface(window);
}
void draw(){
SDL_SetRenderDrawColor(renderer,255, 255, 255, 255);
SDL_RenderClear(renderer);
SDL_SetRenderDrawColor( renderer, 255, 0, 0, 255);
SDL_RenderFillRect( renderer, &one);
SDL_SetRenderDrawColor( renderer, 0, 66, 255, 255);
SDL_RenderFillRect( renderer, &two);
SDL_RenderPresent(renderer);
}
void logic(){
Uint8 *state;
while (SDL_PollEvent(&e) !=0) {
if (e.type == SDL_KEYDOWN)
{
switch (e.key.keysym.sym)
{
case SDLK_RIGHT:
one = {2,2,124,124};
//two = {130,2,124,124};
break;
case SDLK_LEFT:
one = {0,0,0,0};
break;
}
}
else if (e.type == SDL_QUIT)
{
quit = true;
}
}
}
int main(int argc, char* args[]){
init();
while (!quit)
{
logic();
draw();
}
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(window);
renderer = NULL;
window = NULL;
SDL_Quit();
return 0;
}
解决方案
推荐阅读
- java - 如何在java中逐字比较两个字符串
- c++ - 遍历二叉树时如何跟踪层?
- batch-file - 如何使用dosbox打开一个新的cmd窗口?
- word2vec - 不同语法的word2vec
- javascript - 带参数的内部端点调用
- ms-access - 对两个表执行反 INNER JOIN
- sas - 仅保留与 sas 中的要求匹配的连续行,例如
- python - python2.7.12 不包含 numpy 也不包含 pip 所以我无法在 gromacs 中运行我的程序
- c++ - 如何打印调用函数的行号和文件名而不是 log.cpp?
- python - 下游类中不可访问的对象初始化属性