初次结束SDL,版本为2.0.8,使用环境为MaxOS。
参考网上的例子写了一个player程序,编译没有问题,运行过程中没有任何报错。
但是SDL2创建的窗口显示不出来,真让人苦恼。
综合种种现象和以往经历,这肯定是一个小问题,很可能是惯用用法不正常或者有遗漏造成的。
最终经过大量的实验调整,添加如下代码,窗口得以重见天日:
SDL_Event event;
if (SDL_PollEvent(&event)) {
printf("event is %#x\n", event.type); // test code
if (SDL_QUIT == event.type) {
cout << "SDL2 quit" << endl;
break;
}
}
居然是事件!!!
特写此博客,铭记这血的教训,希望也能为他人带来些许帮助。
------------------------------------------------------------------------------------
通过test code,结合type的各个值,大胆推测一下:
依靠SDL_PollEvent()从事件队列中提取事件。
SDL2依靠事件驱动,包含设备状态,鼠标状态,窗口状态等一系列事件,事件被提取作为事件处理标准。
但是事件不能堆积在事件队列中,哪怕是被丢掉。
多次实验,发现每次程序启动后,最新过来的事件号是0x1100。
SDL_AUDIODEVICEADDED = 0x1100, /**< A new audio device is available */
那么该事件号很可能为窗口准备完成的标志,如果不poll出来的话,窗口将一直处于等待状态。
大概就是这个样子吧,希望看到的大神指正一下。