版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
主貼吧:C4droid吧Copyright(c)2014 >All 本向的對(duì)象為SDL2初學(xué)者或正在使用C4droid練習(xí)c/c++語(yǔ)音的中學(xué)生高中生等。臺(tái)C4droid用g++編譯器編譯通過(guò)。當(dāng)然我希望源代碼在你的任何問(wèn)題,不到的可以上C4droid吧發(fā)帖提 第二 顯示..................................................................... 我們要學(xué)的內(nèi)容是創(chuàng)建窗口,首先要包含SDL2的頭文件:#include#include函數(shù)必須這樣申明intmain(intargc,char*argv[]);intintmain(intargc,char{嘿嘿。我經(jīng)常忘掉參數(shù)名這東西吐槽一句,我剛剛用:intmain()也成功運(yùn)行個(gè)SDL_Window*結(jié)構(gòu)體,注意有個(gè)*號(hào)捏,還要在申明時(shí)初始化為NULL:在使用指針前初始化為NULL是一個(gè)很好的習(xí)慣,話說(shuō)在申明變量是初始化也SDL_RendererSDL_Rendererwinwin= oWorld",0,0,480,800,renderer=SDL_CreateRenderer(win,-1,是窗口的大小,在C4droid上它總是全屏的。所以在C4droid上,設(shè)不設(shè)置關(guān)SDL_TextureSDL_Texture oTex=小哦!靠!1:11了,睡覺(jué),明天繼續(xù)寫(xiě)。與畫(huà)板配對(duì)的當(dāng)然是畫(huà)紙SDL_SurfaceSDL_Surface*Surface=SurfaceSurface= 上面的代碼是在畫(huà)紙上作畫(huà)和把畫(huà)紙貼在畫(huà)板oTex上。注意畫(huà)紙(Surface)的加載函數(shù),這里用到的是LoadBMP()也就是說(shuō)只支持加載bmp格式的文件,這很重要,不然沒(méi)發(fā)加載。。。。還有路徑:"/mnt/sdcard/o.bmp",在SDL2下的文件都是要用絕對(duì)路徑的,如果使用相對(duì)路徑,則不能加載。 oTex,NULL,這里有兩個(gè)NULL參數(shù),第一個(gè)是截取畫(huà)板上的區(qū)域,一個(gè)是截取墻上的區(qū)域,關(guān)于使用它,我會(huì)在第三課為大家介紹,還會(huì)介紹它的孿生兄弟給你哦!要像2秒(2000毫秒/*/*銷(xiāo)毀繪畫(huà)表面*/ /*銷(xiāo)毀渲染器*/return0;}第二 顯示經(jīng)過(guò)昨天的第一課,相信大家對(duì)SDL2的繪圖方式有了一定的了解了吧?這是我的理解:SDL_Surface*->SDL_Texture*->SDL_Renderer*->SDL_Window*今天我們要學(xué)習(xí)的是顯示,,呃呃,其實(shí)昨天就顯示了一張了,,今天我們要說(shuō)的是顯示非bmp格式的。SDL.h內(nèi)沒(méi)有定義其他的加載函#include#include這個(gè)頭文件擴(kuò)展了加載函數(shù),可以加載多種如等格式的typedeftypedef{IMG_INIT_JPG=0xIMG_INIT_PNG=0xIMG_INIT_TIF=0x},,,externDECLSPECintSDLCALLIMG_Init(intexternexternDECLSPECvoidSDLCALLexternexternDECLSPECSDL_Surface*SDLCALLIMG_Load(constcharSurfaceSurface= SurfaceSurface=的
PP*renderer,constcharSA 這個(gè)是直接加載成 Texture 個(gè)函數(shù) externexternDECLSPECintSDLCALLIMG_isICO(SDL_RWops 第一節(jié)去背景色第二節(jié)切割第三節(jié)旋轉(zhuǎn)縮放 經(jīng)過(guò)前面兩課的講解,相信大家對(duì)于SDL2的使用有了初步的認(rèn)識(shí),下面我將:::的東西都放在main函數(shù)了,我們要學(xué)會(huì)對(duì)程序進(jìn)行模塊化。#include"SDL2/SDL.h"#include"SDL2/SDL.h"SDL_Window*win=SDL_Renderer*renderer=SDL_Texture*pic=NULL;SDL_Surface*picSur=NULL;SDL_TextureSDL_Texture*pic=NULL;SDL_Surface*picSur=NULL;SDL_Texture*background=NULL;std::stringRootFile=;初始化函數(shù)intint{/*SDL/*win=",0,0,480,800,rendererSDL_CreateRenderer(win,-1,}釋放函數(shù)intint{/*銷(xiāo)毀繪畫(huà)表面*//*銷(xiāo)毀渲染器*//*/*/*}intintBiltTexture(intx,inty,SDL_Texture*Draw_Texture,SDL_Renderer*Draw_Render){Draw_Render_Rect.x=x;Draw_Render_Rect.y=y;intw=0,h=SDL_QueryTexture(Draw_Texture,NULL,NULL,&w,&h);Draw_Render_Rect.w=w;Draw_Render_Rect.h=}上面用到的intSDL_QueryTexture(SDL_Texture*texture,Uint32*format,int*access,int*w,int*h)是用來(lái)查詢(xún)Texture的信息的。以便在繪制的時(shí)候不會(huì)造接下來(lái)。我們來(lái)編寫(xiě)去背景色的函數(shù)SDL_SurfaceSDL_Surface*SetColorKey(SDL_Surface*f,intr,intg,int{//(Usignedint32-Uint32colorkey=SDL_MapRGB(f->format,0,0xFF,0xFF);SDL_SetColorKey(f,SDL_TRUE,colorkey);return}其中通過(guò)表面,標(biāo)記(SDL_FALSE,SDL_TRUE),32位無(wú)符號(hào)色intintLoadSrc(std::string{picSur=IMG_Load((RP+picSur=SetColorKey(picSur,0,0xff,//pic=SDL_CreateTextureFromSurface(renderer,background=IMG_Load((RPif((pic==NULL)||(background==NULL))return-1;return}intintmain(intargc,char{if((Init()!=0)||(LoadSrc(RootFile)!=0))return-1;BiltTexture(0,0,background,renderer);BiltTexture(100,200,pic,renderer);return0;}是不是苗條一些了?這是運(yùn)行的嗯,可以看到。的淺綠色背景不見(jiàn)了(呃呃,雖然背景是深綠,看得出吧) externexternDECLSPECintSDLCALLSDL_Texture*texture,constSDL_Rect*srcrect,constSDL_Rect*對(duì)于這個(gè)函數(shù),相信大家都不陌生,面已經(jīng)用到過(guò)多次了,不知大家注意到?jīng)]有,有個(gè)參數(shù)是用NULL來(lái)對(duì)它進(jìn)行賦值的。也就是源函數(shù)申明中的constRect*srcrect,對(duì)于這個(gè)參數(shù),我們可以從名字知道src表示的是source的意思。rect既rectangle也就是矩形,與之對(duì)應(yīng)的類(lèi)型是SDL_Rect類(lèi)那么,這個(gè)是干什么用的?仔細(xì)想想加上ntt*dstrect這個(gè)提示就NULL,是因?yàn)槲覀冇玫氖钦麖?。學(xué)了今天過(guò)后。一張文件就可以包含很多張小文件了,可以省下跟多東西,比如說(shuō)內(nèi)存。在用的時(shí)候,只需要知道那些小!intintClipBiltTexture(intx,inty,SDL_Texture*Draw_Texture,SDL_RectClip,SDL_Renderer*Draw_Render);5Clip是我們新添的形參。它用來(lái)接受一個(gè)了小的位置信息的SDL_Rect類(lèi)型。看看如何使用它:intintClipBiltTexture(intx,inty,SDL_Texture*Draw_Texture,SDL_RectClip,SDL_Renderer*Draw_Render){Draw_Render_Rect.x=x;Draw_Render_Rect.y=intw=0,h=SDL_QueryTexture(Draw_Texture,NULL,NULL,&w,&h);Draw_Render_Rect.w=Clip.w;Draw_Render_Rect.h=}
Draw_Render_Rect.wDraw_Render_Rect.w=Draw_Render_Rect.h=clip.x=0;clip.y=clip.wclip.w=clip.h=
ClipBiltTexture(0,ClipBiltTexture(0,0,pic,clip,調(diào)用了我們新編的函數(shù)。接下來(lái),我們看看運(yùn)行效果:
externexternintintSDL_RenderCopyEx(SDL_Renderer*renderer,SDL_Texture*texture,constSDL_Rect*srcrect,constSDL_Rect*dstrect,constdoubleangle,constSDL_Point*center,SDL_RenderCopy()相比他多了3個(gè)參數(shù):angle角度,一個(gè)雙精度的浮點(diǎn)數(shù)。;center中心,一個(gè)SDL_Point類(lèi)型的相信大家都是聰明的孩紙。看上面的函數(shù)申明應(yīng)該參數(shù)。用來(lái)旋轉(zhuǎn)中心;最后一個(gè)是一個(gè)標(biāo)記,他也是用來(lái)旋轉(zhuǎn)的,有以下3種模(intx,intSDL_Texture*Draw_Texture,boolzoom=false,floatextent=1.0,doubleangle=0.0,intcx=-1,intcy=-1){先是申明,本次什么我們也包含了一個(gè)雙精度浮點(diǎn)數(shù)angle,對(duì)應(yīng)的是旋轉(zhuǎn)角度,還有整型的cx,cy用來(lái)設(shè)置其旋轉(zhuǎn)中心,這里被初始化為-1;至于為什么?接下來(lái)再說(shuō)。還有兩個(gè)參數(shù)是縮放用的一個(gè)bool類(lèi)型。用來(lái)設(shè)置是否對(duì)進(jìn)行縮放,還有一個(gè)整型的extent用來(lái)設(shè)置縮放比例。SDL_RectSDL_RectDraw_Render_Rect.x=x;Draw_Render_Rect.y=intw=0,h=SDL_QueryTexture(Draw_Texture,NULL,NULL,&w,if(extent<if(extent<{extent}始化為1.0既不進(jìn)行縮放。ifif{Draw_Render_Rect.w=w*extent;Draw_Render_Rect.h=h*extent;}{Draw_Render_Rect.h=h;}這里是使用縮放的部分,由上節(jié)可以知道,矩形Draw_Render_Rect的存在,srcrect一樣,它是用來(lái)描述位置信息的矩形,不過(guò)是描述在窗口上的位置。即貼在窗口上的信息,在這里我們可以通過(guò)設(shè)置其長(zhǎng)和寬來(lái)實(shí)現(xiàn)對(duì)進(jìn)行縮放,第一二課的都是沒(méi)有設(shè)置這個(gè)參數(shù)。所以都被拉伸至全屏了。ifif((cx!=-1)&&(cy!=-{center.x=cx;center.x=Render,Draw_Texture,}{Draw_Texture,NULL,angle,NULL,}}} 顯示文字不是SDL2的一個(gè)標(biāo)準(zhǔn)庫(kù)。而是一個(gè)擴(kuò)展庫(kù)。讓我們把它包含進(jìn)源代#include#includestringstringFonts=SDL_TextureSDL_Texture*Text(std::stringFonts,intFontSize,SDL_Renderer*std::stringFontsPath,intr=0,intg=0,intb=0,intTTF_Font*font=font=TTF_OpenFont(FontsPath.c_str(),color.r=r;color.g=g;color.b=b;color.a=FF{Uint8e L_Color使用SS*p= UTFrnder,TT_CloseFont(font);if(fonts!=NULL)return} s ed第五課觸屏上節(jié)我們學(xué)習(xí)了幾個(gè)關(guān)于游戲的處理,但是游戲是人來(lái)玩的,當(dāng)然少不了人的存在。那么如何獲取人的行為呢?SDL2定義的一個(gè)SDL_Event用來(lái)處理SDL_KeyboardEventkey鍵盤(pán)數(shù)SDL_MouseMotionEventmotion鼠標(biāo)動(dòng)作數(shù)SDL_TouchFingerEventtfinger觸屏數(shù)據(jù)Uint32type類(lèi)Uint32timestampSDL_TouchIDtouchIdfloatxfloatyfloatdx末位置floatdyfloatpressure按壓 while(true)while(true){while{if(event.type=={Tx=Ty=}Tx=event.tfinger.x;Ty=}} 如果你想使用對(duì)的動(dòng)作進(jìn)行判斷,可以使用dx,dy
數(shù)據(jù)了變是一個(gè)戳 用于像Android機(jī)這樣的使用,此書(shū)的所有代碼都是在Android平臺(tái)數(shù)我SDL_StartTextInput()由名稱(chēng)可以知道這個(gè)函數(shù)是用來(lái)開(kāi)始獲取文本輸入的。所以,當(dāng)我們使用字母或數(shù)字鍵是它把作為文本輸入而不是按鍵(吐槽一句,SDL2.0的文本輸入真的不咋滴),所以使用上下左右來(lái)調(diào)試Uint32type類(lèi)型SDL_KEYDOWN按下SDL_KEYUPUint32timestampUint32windowIDUint8stateSDL_PRESSEDSDL_RELEASEDUint8repeatSDL_Keysymkeysym描繪了按下過(guò)釋放的內(nèi)SDL_Scancodescancode物理的按鍵 由于很多,請(qǐng)大家SDL_KeycodesymSDL虛擬的按鍵 由于很多,請(qǐng)大家whilewhile{{switchif(event.typeswitchif(event.type=={{case{BiltTexture(0,0,Text("SDLK_UP",40,Render,Fonts,}case{BiltTexture(0,0,Text("SDLK_DOWN",40,Render,255,255),}case{BiltTexture(0,0,Text("SDLK_LEFT",40,Render,255),Render);}case{BiltTexture(0,BiltTexture(0,0,Text("SDLK_RIGHT",40,Render,255,255),}case{BiltTexture(0,0,Text("SDLK_1",40,Fonts,255,255),Render);}case{BiltTexture(0,0,Text("SDLK_2",40,Render,Fonts,255),}case{BiltTexture(0,0,Text("SDLK_3",40, Fonts,255),}}在本人上上面的代碼出了上下左右可以響應(yīng)之外,其他代碼無(wú)法響應(yīng),電whilewhile{while{if(event.type=={ }e ets,255,if(T==BiltTexture(0,0,Text("你按下了A鍵edts,} 一個(gè)游戲除了精美的畫(huà)面效果,還要有與之相對(duì)的音效。本節(jié),我們要講解的是音效和背景音樂(lè)的。SDL2本身并沒(méi)有音頻的函數(shù),那么就需要我#include#includeexternexternDECLSPECintSDLCALLMix_OpenAudio(intfrequency,Uint16format,intchannels,intchunksize);
frequency頻率常用format格式常用channels通道隨意chunksize*Mix_LoadWAV_RW(SDL_RWops*src,Mix_LoadWAV_RW(SDL_RWFromFile(file,"rb"),*Mix_LoadMUS(constcharexternexternDECLSPECvoidSDLCALLChunk(Mix_ChunkexternDECLSPECvoidSDLCALL externDECLSPECintSDLCALLMix_ channel,Mix_Chunk*chunk,intloops,intticks);externDECLSPECintSDLCALL *music,int
loops循環(huán)次數(shù)以及兩個(gè)音頻的結(jié)構(gòu)ticks-1typedeftypedefstruct{intallocated;Uint8*abuf;Uint32alen;Uint8volume;}typedefstruct_Mix_Music必須在使用所有函數(shù)前使用OpenAudio函數(shù);:導(dǎo)致函數(shù)失效,在加載函數(shù)使用后無(wú)法對(duì)Mix_Chunk和Mix_Music初始化,即一直為空。不得 函數(shù)與加載函數(shù)放在同一個(gè)函數(shù)內(nèi),即使里面包含了函數(shù)前Android知的為mp3格式的文件。在使用音頻的時(shí)候最好是使用wavLinuxoggAndroid。內(nèi)置音頻基本為ogg格式。 {Mix_Chunk*Chunk= yChannelTimed(1,Chunk,0,-1);}使用流程Mix_Chunk*。第八課限制幀頻關(guān)于動(dòng)畫(huà),都是一幀一幀變化形成,這也是為什么我們要用while(true)的原因我們需要不斷在窗口上繪圖才能夠形成動(dòng)畫(huà),科學(xué)家曾,當(dāng)變化為每秒24張的時(shí)候,眼睛將無(wú)法分辨主次,于是就有了。本節(jié)學(xué)習(xí)控制繪畫(huà)的速率,說(shuō)到底就是不讓他畫(huà)的過(guò)快。以前我們用的是SDL_Delay()函數(shù)來(lái)控制,現(xiàn)在我們?cè)偌尤胍粋€(gè)計(jì)時(shí)器:SDL_GetTicks();externDECLSPECUint32SDLCALLSDL_GetTicks(void);intintintFrame=24;while(true){TimeSt
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024至2030年中國(guó)干濕式除塵器數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2024至2030年中國(guó)塑料線槽行業(yè)投資前景及策略咨詢(xún)研究報(bào)告
- 2024至2030年中國(guó)合金鑄棒數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2024至2030年中國(guó)冷凍陳列柜行業(yè)投資前景及策略咨詢(xún)研究報(bào)告
- 2024年中國(guó)絞磨機(jī)市場(chǎng)調(diào)查研究報(bào)告
- 2024年中國(guó)氣眼市場(chǎng)調(diào)查研究報(bào)告
- 新疆2020年中考化學(xué)真題(含答案)
- 2024年中國(guó)家庭影院功放音響市場(chǎng)調(diào)查研究報(bào)告
- 2024年中國(guó)單孔雙聯(lián)龍頭市場(chǎng)調(diào)查研究報(bào)告
- 2024年中國(guó)交流變頻柜市場(chǎng)調(diào)查研究報(bào)告
- 天津市南開(kāi)中學(xué)2020-2021學(xué)年高一上學(xué)期期中考試物理試題含答案
- 建設(shè)工程施工勞務(wù)分包合同(地坪)(完整版)
- CJJ88-2014城鎮(zhèn)供熱系統(tǒng)運(yùn)行維護(hù)技術(shù)規(guī)程
- 無(wú)線電遙控帆船講解
- 壓力與情緒管理(完整版)
- 無(wú)機(jī)材料學(xué)報(bào)投稿模板
- 福建省標(biāo)準(zhǔn)化考點(diǎn)巡視監(jiān)控系統(tǒng)操作規(guī)范
- 金匱要略原文 .doc
- 云存儲(chǔ)培訓(xùn)版課件
- XX大學(xué)“青年英才培養(yǎng)計(jì)劃”實(shí)施辦法(暫行)
- 口腔頜面部局部麻醉并發(fā)癥的臨床應(yīng)急操作
評(píng)論
0/150
提交評(píng)論