示例代码
#include <SDL2/SDL.h>
const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;
// 图层枚举
enum KeyPressSurfaces
{
KEY_PRESS_SURFACE_DEFAULT,
KEY_PRESS_SURFACE_UP,
KEY_PRESS_SURFACE_DOWN,
KEY_PRESS_SURFACE_LEFT,
KEY_PRESS_SURFACE_RIGHT,
KEY_PRESS_SURFACE_TOTAL
};
int main(int argc, char const *argv[])
{
SDL_Window *window = NULL;
SDL_Surface *screenSurface;
// 初始化 SDL, 创建窗口
if(SDL_Init(SDL_INIT_VIDEO) < 0)
{
printf( "SDL could not initialize! SDL_Error: %s\n", SDL_GetError() );
exit(-1);
}
else
{
window = SDL_CreateWindow( "SDL Tutorial", SDL_WINDOWPOS_UNDEFINED,
SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN );
if(window == NULL)
{
printf( "Window could not be created! SDL_Error: %s\n", SDL_GetError() );
exit(-1);
}
else
{
screenSurface = SDL_GetWindowSurface( window );
}
}
// 加载文件
SDL_Surface *tab[5];
tab[0] = SDL_LoadBMP("image/press.bmp");
tab[1] = SDL_LoadBMP("image/up.bmp");
tab[2] = SDL_LoadBMP("image/down.bmp");
tab[3] = SDL_LoadBMP("image/left.bmp");
tab[4] = SDL_LoadBMP("image/right.bmp");
for(int i=0; i<5; i++)
{
if(tab[i] == NULL)
{
printf("Failed to load image!");
exit(1);
}
}
SDL_Event event;
bool quit = false;
SDL_Surface *currentSurface = tab[KEY_PRESS_SURFACE_DEFAULT];
// 事件处理
while (quit == false)
{
while(SDL_PollEvent(&event) != 0)
{
if(event.type == SDL_QUIT)
{
quit = true;
}
// 有按键按下
else if (event.type == SDL_KEYDOWN)
{
/**
* SDL事件内部是有很多事件类型,key 是其中一个, key 里面是一个SDL Keysym,
* 它包含有关按下的键的信息。该Keysym包含识别所按键的SDL密钥码
* 如您所见,此代码的作用是根据按下的键设置图层。如果要了解其他键的其他键代码,请参阅SDL文档。
*/
switch (event.key.keysym.sym)
{
case SDLK_UP:
currentSurface = tab[KEY_PRESS_SURFACE_UP];
break;
case SDLK_DOWN:
currentSurface = tab[KEY_PRESS_SURFACE_DOWN];
break;
case SDLK_LEFT:
currentSurface = tab[KEY_PRESS_SURFACE_LEFT];
break;
case SDLK_RIGHT:
currentSurface = tab[KEY_PRESS_SURFACE_RIGHT];
break;
default:
currentSurface = tab[KEY_PRESS_SURFACE_DEFAULT];
break;
}
}
}
// 充填图片图层
SDL_BlitSurface( currentSurface, NULL, screenSurface, NULL );
SDL_UpdateWindowSurface( window );
SDL_Delay(1000 / 60);
}
SDL_DestroyWindow( window );
SDL_Quit();
return 0;
}
运行结果
![](https://img.haomeiwen.com/i17837162/5e5d8cee54fa4e6a.png)
注: 示例中的图片需要 bmp 格式的图片
网友评论