青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

VC++ C++ C# Algorithm

C++博客 首頁 新隨筆 聯系 聚合 管理
  21 Posts :: 3 Stories :: 31 Comments :: 0 Trackbacks

?

我們可以把表面想象成一張畫布, blit 表面就是把一個表面的某個區域 COPY 到另外一個表面上去。

//The headers

#include " SDL.h"

#include <string>

以上就是我們需要的頭文件了。

//The attributes of the screen

const int SCREEN_WIDTH = 640;

const int SCREEN_HEIGHT = 480;

const int SCREEN_BPP = 32;

3 個描述屏幕屬性的變量

SCREEN_BPP 是顏色深度,就是每個象素用多少為來表示,我們這里用 4 個字節。

//The surfaces that will be used

SDL_Surface *message = NULL;

SDL_Surface *background = NULL;

SDL_Surface *screen = NULL;

接著我們又定義了 3 個表面,一個用于顯示背景,一個用于顯示 Hello World ,還有一個當然是代表屏幕了。

SDL_Surface *load_image( std::string filename )

{

??? //Temporary storage for the image that's loaded

??? SDL_Surface* loadedImage = NULL;

???

??? //The optimized image that will be used

SDL_Surface* optimizedImage = NULL;

好了,我們可以寫一個自己的圖像裝載函數,該函數負責 Load 圖片,并返回一個經過優化的表面,當然圖片已經在表面上了。

//Load the image

??? loadedImage = SDL_LoadBMP( filename.c_str() );

首先我們使用 SDL_LoadBMP() 函數 Load 一張 BMP 格式的圖片。應為位圖是 24 位,所以我們不應該立即使用該表面,因為屏幕是 32 位的。如果在二各具有不同 format 表面進行 Blit ,那么 SDL 將會不停地進行格式之間的轉換,程序就會變得很慢。 .

?

??? if( loadedImage != NULL )

??? {

??????? //Create an optimized image

?? ?????optimizedImage = SDL_DisplayFormat( loadedImage );

???????

??????? //Free the old image

??????? SDL_FreeSurface( loadedImage );

}

以上幾行代碼檢查了圖片是否被正確加載了,如果有錯誤的話,那么 loadedImage 將是 NULL

SDL_DisplayFormat() 用于創建一個和屏幕表面相同格式的 Surface 。之所以這樣做就是為了加快程序速度,避免 SDL 類庫在對二個不同格式表面進行 Blit 時進行格式轉換。

?

好了,現在我們擁有二個表面了,一個上面有圖片,還有一個是前一個經過格式轉換得到的。

?

displayformat.jpg
freesurface.jpg

?

因為第一表面我們不需要了,所以我們就要釋放掉, SDL_FreeSurface() 函數就是干這件事情的。

??? //Return the optimized image

??? return optimizedImage;

}

好了,我們返回經過優化的表面。

void apply_surface( int x, int y, SDL_Surface* source, SDL_Surface* destination )

{

??? //Make a temporary rectangle to hold the offsets

??? SDL_Rect offset;

???

??? //Give the offsets to the rectangle

??? offset.x = x;

offset.y = y;

接下來,我們再寫一個 Blit 函數。 X,Y 是目標表面的偏移量,另外二個自然是要進行 Blit 的二個表面了。

首先我們把偏移量塞入到一個 SDL_Rect 變量里面,這樣做的原因很簡單,就是 SDL_BlitSurface 只接受 SDL_Rect 結構中的偏移。

SDL_Rect 結構代表一個長方形 . 它有四個成員,左上角的坐標,長和寬。

??? //Blit the surface

??? SDL_BlitSurface( source, NULL, destination, &offset );

}

好了,調用 SDL_BlitSurface 實現 Blit 。第二個參數是源表面的要被 Blit 的區域,我們用 NULL 表示要對整個源表面進行 Blit

int main( int argc, char* args[] )

{

??? if( SDL_Init( SDL_INIT_EVERYTHING ) == -1 )

??? {

??????? return 1;???

??? }

SDL_Init() 函數中,我們使用 SDL_INIT_EVERYTHING 參數,表示我們希望啟動所有 SDL 子系統,其中包括,視頻,聲音,時間,以及其他一些制作游戲所用到的組建。

?? screen = SDL_SetVideoMode( SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP, SDL_SWSURFACE );

現在我們用 SDL_SetVideoMode 函數新建一個窗口,它返回一個指向窗口表面的指針,這樣我們就可以把圖像往屏幕上 Blit 了。

?

??? if( screen == NULL )

??? {

??????? return 1;???

??? }

如果函數有問題的話,就返回 NULL 。下面我們也可以改變一下窗口的標題。 ??? SDL_WM_SetCaption( "Hello World", NULL );

?? message = load_image( "hello_world.bmp" );

?? background = load_image( "background.bmp" );

?? apply_surface( 0, 0, background, screen );

現在我們把背景 Blit 到屏幕上,在 Blit 背景之前,窗口是黑色,如下圖。

?blank.jpg

?

再這之后,窗口的背景就改變了。
background.jpg

用同樣的方法,我們把 message Blit 到屏幕上去。

apply_surface( 180, 140, message, screen );

?

??? if( SDL_Flip( screen ) == -1 )

??? {

??????? return 1;???

??? }

雖然我們把背景表面和消息表面都 Blit 到屏幕表面上去了,窗口還是一片漆黑,因為我們沒有調用 SDL_Flip 函數來更新窗口,記住,屏幕表面是建立在系統內存當中的。

? SDL_Delay( 2000 );

好了,讓窗口停頓二秒,以免我們什么也不到。

??? //Free the surfaces

??? SDL_FreeSurface( message );

??? SDL_FreeSurface( background );

???

??? //Quit SDL

??? SDL_Quit();

???

??? //Return

??? return 0;

}

好了,我們的主函數也寫完了,最后我釋放了二個表面,并調用了 SDL_Quit 函數,清理我們所使用到其他資源。

?

好了,運行一下程序,你不意外你就能看到如下的效果了。如果有什么錯誤的話,看看第一個教程。
coorddemo.jpg

posted on 2007-03-05 19:00 大熊貓 閱讀(862) 評論(0)  編輯 收藏 引用
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产欧美精品日韩| 牛牛影视久久网| 久久先锋资源| 欧美中文字幕在线| 欧美一区二区日韩| 欧美在线一二三| 久久久久久久国产| 老鸭窝亚洲一区二区三区| 猛干欧美女孩| 一本大道久久a久久精二百| 一本大道av伊人久久综合| 亚洲亚洲精品在线观看| 亚洲欧美中文日韩v在线观看| 欧美一区二区日韩一区二区| 久久精品首页| 欧美精品一线| 国产欧美一区二区三区在线老狼| 在线日本高清免费不卡| 亚洲国内精品| 亚洲欧美欧美一区二区三区| 久久久久久网站| 亚洲人成啪啪网站| 亚洲精选视频在线| 亚洲欧美日韩综合aⅴ视频| 久久久国产视频91| 欧美日韩成人激情| 狠狠色狠狠色综合系列| 一本一本久久a久久精品牛牛影视| 亚洲欧美国产三级| 亚洲成人在线网站| 亚洲欧美偷拍卡通变态| 欧美成人激情在线| 国产午夜精品久久久久久免费视| 日韩午夜一区| 玖玖精品视频| 亚洲专区国产精品| 欧美日韩视频专区在线播放 | 欧美14一18处毛片| 亚洲国产小视频在线观看| 亚洲尤物影院| 欧美国产在线视频| 好看的av在线不卡观看| 亚洲欧美日韩系列| 亚洲国产高清aⅴ视频| 亚洲欧美国产视频| 欧美日韩福利视频| 亚洲激情国产| 久久久久久久高潮| 欧美一区激情| 国产一区二区三区免费观看| 亚洲欧美日韩久久精品| 亚洲美女免费视频| 欧美国产亚洲视频| 亚洲精品国产精品国自产观看浪潮| 久久久久久电影| 欧美在线日韩精品| 国产一区二区三区久久悠悠色av | 日韩视频欧美视频| 欧美成人免费视频| 久久人人爽爽爽人久久久| 国产亚洲视频在线| 久久久国产精品一区| 午夜精品999| 国产欧美精品xxxx另类| 久久精品30| 久久se精品一区精品二区| 国产欧美一区二区三区在线老狼 | 欧美91大片| 久久久91精品国产一区二区精品| 国产在线精品自拍| 久久久久久穴| 久久精品国产亚洲一区二区三区| 黄色另类av| 久久人人爽人人| 久久这里只有精品视频首页| 亚洲成色777777女色窝| 欧美激情在线狂野欧美精品| 欧美国产精品| 亚洲无人区一区| 亚洲欧美国产视频| 一色屋精品视频免费看| 欧美大片91| 欧美色道久久88综合亚洲精品| 亚洲一区二区在线| 欧美大片在线观看一区| 欧美福利视频一区| 国产一区二区丝袜高跟鞋图片| 欧美成人有码| 国产精品成人aaaaa网站| 怡红院精品视频| 欧美激情亚洲精品| 欧美国产日本高清在线| 一区二区三区精品在线| 亚洲无线视频| 怡红院av一区二区三区| 欧美黄色视屏| 国产精品久久久久久久app| 久久久国产一区二区三区| 另类综合日韩欧美亚洲| 宅男精品视频| 久久精品久久99精品久久| 亚洲美女精品成人在线视频| 亚洲小少妇裸体bbw| 韩日在线一区| 一区二区av在线| 精品1区2区3区4区| 一区二区高清视频| 狠狠色狠狠色综合日日小说| 亚洲精品国产精品久久清纯直播| 欧美日韩国产在线播放网站| 久久久久国内| 欧美视频网址| 亚洲第一页在线| 国产午夜久久久久| 亚洲美女在线国产| 最新69国产成人精品视频免费| 亚洲曰本av电影| 亚洲桃色在线一区| 欧美成人精品| 美女成人午夜| 国产日韩欧美亚洲一区| 日韩视频在线观看| 在线欧美日韩国产| 欧美中文在线视频| 欧美主播一区二区三区美女 久久精品人| 欧美freesex8一10精品| 久久久人成影片一区二区三区观看 | 国产精品扒开腿爽爽爽视频| 欧美二区在线| 好吊妞这里只有精品| 性久久久久久久久久久久| 亚洲欧美美女| 国产精品久久久久久妇女6080| 亚洲精品乱码久久久久久蜜桃麻豆 | 亚洲永久免费观看| 午夜免费日韩视频| 国产精品裸体一区二区三区| 一区二区欧美在线| 国产精品综合网站| 影音先锋久久| 久久av资源网站| 久久麻豆一区二区| 红桃视频国产精品| 久久综合久久美利坚合众国| 麻豆乱码国产一区二区三区| 韩国精品主播一区二区在线观看| 午夜精品久久久久久久蜜桃app | 久久国产精品久久久久久电车| 欧美午夜三级| 亚洲一区中文字幕在线观看| 亚洲欧美综合精品久久成人| 国产精品久久久久影院亚瑟 | 亚洲一区二区三区免费观看 | 久久综合色影院| 欧美激情精品久久久久久变态| 亚洲国产精品va在看黑人| 欧美阿v一级看视频| 最近中文字幕日韩精品| 亚洲网站啪啪| 国产亚洲福利| 欧美阿v一级看视频| 一区二区免费在线观看| 欧美一区二区高清| 在线观看视频欧美| 欧美承认网站| 亚洲一区二区免费| 蜜桃久久av一区| 亚洲一区精品在线| 国产在线欧美日韩| 欧美日韩视频在线第一区| 亚洲中字在线| 亚洲成色777777在线观看影院| 亚洲特黄一级片| 国模私拍视频一区| 欧美日韩国产影院| 久久久噜噜噜久噜久久 | 影音先锋亚洲电影| 欧美精品在线免费播放| 午夜精品久久久久久久| 亚洲精品影视| 久久麻豆一区二区| 亚洲永久免费观看| 91久久中文| 好吊色欧美一区二区三区四区| 欧美日韩成人网| 久久人人超碰| 欧美一区二区三区另类| 亚洲剧情一区二区| 美女久久一区| 久久国产精品网站| 亚洲欧美乱综合| 一区二区三区四区精品| 亚洲电影激情视频网站| 国产视频久久久久久久| 欧美日韩一区二区三区在线看 | 国产精品日本精品| 欧美日韩久久精品| 亚洲一区中文字幕在线观看| 狠狠爱综合网| 欧美亚一区二区|