SDL mac(event) 入门1 - 显示图像
廢話
SDL(Simple DirectMedia Layer)是一套開放源代碼
的跨平臺多媒體開發(fā)庫,使用C語言寫成。SDL提供
了數(shù)種控制圖像、聲音、輸出入的函數(shù),讓開發(fā)者只
要用相同或是相似的代碼就可以開發(fā)出跨多個平臺
(Linux、Windows、Mac OS X等)的應(yīng)用軟件。目
前SDL多用于開發(fā)游戲、模擬器、媒體播放器等多媒
體應(yīng)用領(lǐng)域。
常用子系統(tǒng)
? SDL_INIT_TIMER:定時器
? SDL_INIT_AUDIO:音頻
? SDL_INIT_VIDEO:視頻
? SDL_INIT_EVENTS:事件
windows 常用過程
? SDL_Init():初始化SDL系統(tǒng)
? SDL_CreateWindow():創(chuàng)建窗口SDL_Window
? SDL_CreateRenderer():創(chuàng)建渲染器SDL_Renderer
? SDL_CreateTexture():創(chuàng)建紋理SDL_Texture
? SDL_UpdateTexture():設(shè)置紋理的數(shù)據(jù)
? SDL_RenderCopy():將紋理的數(shù)據(jù)拷貝給渲染器
? SDL_RenderPresent():顯示
? SDL_Delay():工具函數(shù),用于延時
? SDL_Quit():退出SDL系統(tǒng)
SDL事件
? 函數(shù)
? SDL_WaitEvent():等待一個事件
? SDL_PushEvent():發(fā)送一個事件
? SDL_PumpEvents():將硬件設(shè)備產(chǎn)生的事件放入事件隊(duì)列,用于
讀取事件,在調(diào)用該函數(shù)之前,必須調(diào)用SDL_PumpEvents搜集
鍵盤等事件
? SDL_PeepEvents():從事件隊(duì)列提取一個事件
? 數(shù)據(jù)結(jié)構(gòu)
? SDL_Event:代表一個事件
MAC 的操作系統(tǒng)對于SDL 窗口顯示 前提是必須有事件控制 才可以可視化顯示 也就是必須在有或者是在Event 內(nèi)去構(gòu)建window 或者渲染圖形,否則無法可視化,但是進(jìn)程中可以顯示出來
SDL 繪制窗口中隨機(jī)矩形 并且鍵盤控制退出
#include <stdio.h>#include "SDL2/SDL.h"#define FF_QUIT_EVENT (SDL_USEREVENT + 2) // 用戶自定義事件 SDL_USEREVENT 是SDL api為用戶定義的一個自定義事件的key 可以+1 +2 代表不同的時間 最高+ ffff int main(int argc, char* argv[]) {int run = 1;SDL_Window *window = NULL; //一個窗口SDL_Renderer *renderer = NULL; //一個渲染器SDL_Texture *texture = NULL; // 一個紋理SDL_Event event; // 一個事件SDL_Rect rect;rect.w = 50;rect.h = 50;SDL_Init(SDL_INIT_VIDEO);window = SDL_CreateWindow("2333",SDL_WINDOWPOS_UNDEFINED,SDL_WINDOWPOS_UNDEFINED,1280,960,SDL_WINDOW_OPENGL|SDL_WINDOW_RESIZABLE);if(!window){printf("create window error \n");return -1;}renderer = SDL_CreateRenderer(window,-1,0);if(!renderer){printf("creater renderer error \n");return -1;}texture = SDL_CreateTexture(renderer,SDL_PIXELFORMAT_RGB888,SDL_TEXTUREACCESS_TARGET,1280,960);if (!texture){return -1;}int show_count = 0 ;int b_exit = 0;for(;;){ // 事件控制switch (event.type) /判斷事件 {case SDL_KEYDOWN: // 鍵盤監(jiān)視switch (event.key.keysym.sym) {case SDLK_a:printf("key down a\n");break;case SDLK_s:printf("key down s\n");break;case SDLK_d:printf("key down d\n");break;case SDLK_q:printf("quit event\n");SDL_Event event_q; //創(chuàng)建一個新事件event_q.type = FF_QUIT_EVENT ; //引入用戶自定義keySDL_PushEvent(&event_q); //往消息隊(duì)列中發(fā)送一個事件default:printf("key down 0x%x\n", event.key.keysym.sym);break;}break;case FF_QUIT_EVENT:{printf("receive quit event\n");b_exit = 1;break;}}SDL_WaitEvent(&event);rect.x = rand()%1280;rect.y = rand()%960;SDL_SetRenderTarget(renderer,texture);// 設(shè)置渲染目標(biāo)為紋理SDL_SetRenderDrawColor(renderer,0,255,255,255);SDL_RenderClear(renderer);SDL_RenderDrawRect(renderer, &rect); //繪制一個長方形SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255); //長方形為白色SDL_RenderFillRect(renderer, &rect); / 前面為渲染紋理 后面為窗口SDL_SetRenderTarget(renderer, NULL); //恢復(fù)默認(rèn),渲染目標(biāo)為窗口SDL_RenderCopy(renderer, texture, NULL, NULL); //將紋理數(shù)據(jù)復(fù)制給渲染目標(biāo)SDL_RenderPresent(renderer);SDL_Delay(300);if(b_exit)break;}//destory rendererif (renderer)SDL_DestroyRenderer(renderer);// Close and destroy the windowif (window)SDL_DestroyWindow(window);// Clean upSDL_Quit();return 0;}總結(jié)
以上是生活随笔為你收集整理的SDL mac(event) 入门1 - 显示图像的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HTML <s> 标签
- 下一篇: 清理电脑广告弹窗工具软件