我在调试SDL2程序时遇到了困难:当我打印诸如SDL_EventType或的枚举SDL_Keycode值时,显示的值非常高并且彼此不同.例如,事件类型SDL_KEYDOWN对应于768 - 枚举中没有769个元素SDL_EventType!
我做了一个小测试,看看这个奇怪的行为是否是由于我的程序,但行为仍然存在:
#include <stdio.h>
#include "SDL.h"
int main(int argc, char *argv[])
{
SDL_Init(SDL_INIT_VIDEO);
SDL_Event event;
SDL_Window *wind = SDL_CreateWindow("ee", 700, 100, 300, 300, 0);
while (SDL_PollEvent == 1)
SDL_PollEvent(&event);
while (1)
{
SDL_PollEvent(&event);
if (event.type == SDL_QUIT || event.key.keysym.sym == SDLK_ESCAPE)
break;
fprintf(stderr, "type = %d\n", event.type);
event.type = 0;
SDL_Delay(15);
}
printf("%d\n", SDL_GetTicks());
SDL_Quit();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
打印SDLK_DOWN,SDL_MOUSEMOTION或这样的关键字输出比以前的方案,这是相干相同的结果.但为什么这些值与枚举类型不一致?
如果你看一下SDL_events.h那么你会看到类似的东西:
/* Window events */
SDL_WINDOWEVENT = 0x200, /**< Window state change */
SDL_SYSWMEVENT, /**< System specific event */
/* Keyboard events */
SDL_KEYDOWN = 0x300, /**< Key pressed */
SDL_KEYUP, /**< Key released */
Run Code Online (Sandbox Code Playgroud)
所以他们只是定义了这样的传播价值.这背后的基本原理是允许添加新值而不会破坏向后兼容性,同时保持某些枚举值的分组.