本节课将教你检查一个按键是否被按下,而不涉及监听键盘事件。
//当用户还没退出时 while( quit == false ) { //当有事件需要处理 while( SDL_PollEvent( &event ) ) { //如果用户点击了窗口右上角的关闭按钮 if( event.type == SDL_QUIT ) { //退出程序 quit = true; } }
你可以看到,尽管我们要根据按键按下的动作来显示信息,我们并没有检查任何键盘事件。
//获取按键状态 Uint8 *keystates = SDL_GetKeyState( NULL );
事实上,我们使用了
这个函数能为我们提供一个按键状态数组,那是一个包含了每个按键以及每个按键是否被按下的列表,就像这样:
现在我们可以分辨出是哪些按键被按下了。
为了提供更多信息,我们给函数
SDL_GetKeyState()
函数。这个函数能为我们提供一个按键状态数组,那是一个包含了每个按键以及每个按键是否被按下的列表,就像这样:
现在我们可以分辨出是哪些按键被按下了。
为了提供更多信息,我们给函数
SDL_GetKeyState()
传入的参数是用来获得可用按键数量的。因为我们不关心共有多少按键,所以我们仅需将它设为NULL。//如果"上方向键"被按下 if( keystates[ SDLK_UP ] ) { apply_surface( ( SCREEN_WIDTH - up->w ) / 2, ( SCREEN_HEIGHT / 2 - up->h ) / 2, up, screen ); } //如果"下方向键"被按下 if( keystates[ SDLK_DOWN ] ) { apply_surface( ( SCREEN_WIDTH - down->w ) / 2, ( SCREEN_HEIGHT / 2 - down->h ) / 2 + ( SCREEN_HEIGHT / 2 ), down, screen ); } //如果"左方向键"被按下 if( keystates[ SDLK_LEFT ] ) { apply_surface( ( SCREEN_WIDTH / 2 - left->w ) / 2, ( SCREEN_HEIGHT - left->h ) / 2, left, screen ); } //如果"右方向键"被按下 if( keystates[ SDLK_RIGHT ] ) { apply_surface( ( SCREEN_WIDTH / 2 - right->w ) / 2 + ( SCREEN_WIDTH / 2 ), ( SCREEN_HEIGHT - right->h ) / 2, right, screen ); } //更新窗口 if( SDL_Flip( screen ) == -1 ) { return 1; }
这是一个基本的例子,当”上方向键“被按下时窗口里显示”上“,当”下方向键“被按下时显示”下“,以此类推。
如果这个程序通过事件来编写,代码会长很多。
如果这个程序通过事件来编写,代码会长很多。
SDL_GetKeyState()
和其他的状态函数,如:SDL_GetModState()
, SDL_GetMouseState()
, SDL_JoystickGetAxis()
等等,都是极其有用的。请在SDL的API参考中学习更多有关内容,你应该把它放在手边的。