SDL2代码(1)

该代码示例演示了如何在Linux环境中利用SDL2库和其image扩展来创建一个简单的图形应用。应用能够加载笑脸和哭脸图片,并根据用户鼠标点击或键盘输入进行切换和移动。通过SDL_Init初始化系统,创建窗口,加载图片,然后处理键盘和鼠标事件来改变显示的图片和位置。
摘要由CSDN通过智能技术生成

需要安装SDL2的image扩展库

sudo apt install libsdl2-image-dev

Linux下编译方式:

gcc 源文件 -lSDL2 -lSDL2_image

图片切换代码:

#include <stdio.h>
#include <stdlib.h>
#include <SDL2/SDL.h>
#include <SDL2/SDL_image.h>
#include <stdbool.h>
#define WIDTH 182//根据自己的图片 非必要
#define HEIGHT 179
#define SCREENWIDTH 800
#define SCREENHEIGHT 600
int main(int argc, char *argv[])
{
    SDL_Init(SDL_INIT_VIDEO);//SDL初始化程序,动画

    SDL_Window* window = SDL_CreateWindow("SDL_try2",
                                          100,
                                          100,
                                          SCREENWIDTH,SCREENHEIGHT,
                                          SDL_WINDOW_SHOWN);//创建窗口
    SDL_Surface* surface = SDL_GetWindowSurface(window);//得到窗口所在表面
    SDL_Surface* smile =IMG_Load("smile.png");//得到笑脸图片
    SDL_Surface* cry = IMG_Load("cry.png");//得到哭脸图片
    SDL_Surface* currentface;
    SDL_Event event;
    SDL_Rect rect;
    rect.x=0;
    rect.y=0;
    int speed=10;//给一个速度变量,后面可以改变速度
    SDL_BlitSurface(smile,NULL,surface,&rect);
    bool quit = false;
    while(quit == false){
        while(SDL_PollEvent(&event)){
            if(event.type == SDL_QUIT){
                quit = true;
            }
            else if(event.type == SDL_MOUSEBUTTONDOWN){//事件类型为鼠标事件
                if(event.button.button==SDL_BUTTON_LEFT){
                    currentface = smile;//点击鼠标左键变为笑脸,event.button是个结构体,里面还包含其他信息(不常用)。
                     SDL_BlitSurface(currentface,NULL,surface,&rect);
                }
                else if(event.button.button == SDL_BUTTON_RIGHT){
                   currentface = cry;//点击鼠标右键
                    SDL_BlitSurface(currentface,NULL,surface,&rect);
                }
            }
            else if(event.type == SDL_KEYDOWN){//键盘事件
                if(event.key.keysym.sym == SDLK_UP){
                   rect.y-=speed;  //event.key.keysym.sym表示按键的虚拟码, 此时表示 上
                }
                if(event.key.keysym.sym == SDLK_DOWN){
                   rect.y+=speed;
                }
                if(event.key.keysym.sym == SDLK_LEFT){
                   rect.x-=speed;
                }
                if(event.key.keysym.sym == SDLK_RIGHT){
                    rect.x+=speed;
                }
                if(event.key.keysym.sym == SDLK_MINUS){
                    speed--;
                }
                 if(event.key.keysym.sym == SDLK_EQUALS){
                    speed++;
                }
            if(rect.x<0)rect.x=0;//避免图形越过屏幕,设置边界
            if((rect.x+WIDTH)>SCREENWIDTH)rect.x = SCREENWIDTH-WIDTH;
             if(rect.y<0)rect.y=0;
            if((rect.y+HEIGHT)>SCREENHEIGHT)rect.y = SCREENHEIGHT-HEIGHT;
            SDL_FillRect(surface,NULL,0);//填充背景色,0表示黑色
            SDL_BlitSurface(currentface,NULL,surface,&rect);
          }
           SDL_UpdateWindowSurface(window);
        }
      }
    SDL_FreeSurface(surface);//释放内存,安全退出
    SDL_FreeSurface(smile);
    SDL_FreeSurface(cry);
    SDL_FreeSurface(currentface);
    SDL_DestroyWindow(window);
    SDL_Quit();
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值