锘??xml version="1.0" encoding="utf-8" standalone="yes"?> 浠涔堟槸SDL錛?br />鍗?Simple DirectMedia Layer錛屼嬌鐢?LGPL 璁稿彲璇併?/p>
鍏嶈垂鐨勮法騫沖彴澶氬獟浣撳簲鐢ㄧ紪紼嬫帴鍙? 鎸併佺綉緇溿丮PEG瑙g爜絳夌瓑錛屼笖CPU瀛楄妭欏哄簭鏃犲叧銆? 澶т綋涓婁笌DirectX姣旇緝瀵瑰簲鍏崇郴濡備笅錛?/p>
SDL_Video銆丼DL_Image銆丱penGL 鈥斺?DirectDraw銆丏irect3D 涓漢瑙傜偣錛堜笉浠h〃浠諱綍鍥綋鍜屼粬浜猴級 涓嶇敤錛岃嚦灝戞噿浜烘繪槸甯屾湜鐢ㄦ洿灝戠殑鍔熷か鍋氭洿澶氱殑 浜嬨傚澶у鏁頒漢鏉ヨ錛屾棤璁篋X銆丱penGL榪樻槸SDL錛岄兘鏄?/p>
浣庡眰API錛屽挨鍏禗X錛屽鏋滄?zhèn)ň_鵑欴X錛岄偅涔堟伃鍠滐紝鎮(zhèn)ㄧ殑紜歡鐭ヨ瘑涓瀹氫篃涓嶉敊銆傜暀蹇冪殑璇濆氨浼氬彂 鐜頒粖澶╃殑娓?/p>
鎴忓緢澶氶兘鎻愪緵閫夐」錛欴irect3D銆丱penGL銆丟lide榪樻槸Software錛屾棦鏄寰堝娓告垙鍘傚晢閮芥牴鎹渶瑕佽璁′簡 鑷繁鐨勯珮灞侫PI錛?搴曞眰鏄彲浠ユ浛鎹㈢殑銆傞偅涔堜篃璁告湁浜鴻姘村鉤楂樼殑鍘傚晢閮芥槸鍏呭垎寮鍙戠‖浠跺姛鑳芥墠鏈夐珮鎬ц兘 鐨勮〃鐜幫紝閭d箞鎴戜婦涓緥瀛愶紝寰堝2D娓告垙鐨勬覆鏌撹櫧鐒剁敤浜?DirectDraw錛屼絾鍗存槸綰蔣浠跺湪鍐呭瓨甯х紦鍐插尯娓?/p>
鏌擄紝鏈鍚庤皟鐢―irectDraw灝嗗浘璞wap鍒板睆騫曘傚浜?D娓告垙鍔犱粖澶╃殑鏈哄櫒閰嶇疆錛孏DI鍔犵洿 鎺ュ撫緙撳啿鎿嶄綔宸?/p>
緇忚凍澶燂紝闇瑕佹洿鍏堣繘鐨勬覆鏌撹兘鍔涙椂灝辮浣跨敤3D鎶鏈紝榪欎篃鏄湪DX8涓璂irectDraw鍜孌irect3D閮借鍩轟簬3D 鐨?DirectGraphics鏇挎崲鎺夌殑鍘熷洜銆備絾鏈涓昏鐨勬槸錛岄夋嫨SDL鎰忓懗鐫璺ㄥ鉤鍙般?/p>
鍥炲埌姝i銆傝薄DX涓鏍鳳紝SDL鐨勫悇涓儴鍒嗘槸鍙互鍗曠嫭浣跨敤鐨勶紝浣嗗繀欏繪湁SDL_Base銆傜獥鍙f秷鎭鐞嗘柟寮忓緢鍙?/p>
钁o紝鍐欒繃Win32紼嬪簭鐨勪竴瀹氳繕璁板緱switch...case錛屾病閿橲DL鐢ㄥ氨鏄繖涓紝浣嗗畬鍏ㄥ彲浠ヤ笉鐢ㄥ畠鐨勩係DL鐨?C 椋庢牸寰堟祿錛屽氨鍍廌irectX鐨凜OM椋庢牸寰堟祿涓鏍鳳紝鐢ㄩ潪 C 綾昏璦鐨勪漢浼氭洿鎰挎剰灝佽涓涓嬪啀鐢ㄣ?/p>
涓嶥X鐩告瘮錛孲DL鏈夋洿蹇殑鍚姩閫熷害錛屾柟渚跨殑璋冭瘯錛堣皟璇曡繃DX紼嬪簭鍚楋紵:( 錛夛紝綆媧佺殑鎺ュ彛錛屽緢灝忕殑榪愯鏃?/p>
搴擄紝褰撶劧棣栬鐨勬槸璺ㄥ鉤鍙般係DL鐩存帴鏀寔寰堝濯掍綋鏂囦歡鏍煎紡錛屼笌DX姣旇搗鏉ラ潪甯哥殑鏂逛究銆備絾SDL鍗崇畝鍗曠洿鎺?/p>
璁塊棶濯掍綋灞傦紝涓嶈薄DX鏀寔閭d箞澶氬姛鑳斤紝褰撶劧涔熷洜涓轟笉鏄瘡涓鉤鍙伴兘鑳芥彁渚涢偅涔堝鍔熻兘銆?/p>
鏍蜂緥浠g爜涓婅錛屾瘮璧稤X錛孲DL鐨勬牱渚嬮潪甯哥煭灝忕簿鎮(zhèn)嶏紝紼嬪簭嫻佺▼鏄洿綰垮紡錛屾晥鏋滀笂涓鐐逛篃涓嶅樊銆傞潪C璇█鐨?/p>
緲昏瘧鐗堟湰淇濈暀浜咰鐨勯鏍鹼紝娌℃湁鍒╃敤鍏堣繘鐨勮璦鐗規(guī)э紝鏄釜閬楁喚銆傝嚦浜庡府鍔╂枃浠訛紝緇濆涓嶅DirectX錛屽緢 澶氭湁鐢ㄧ殑淇℃伅鏄ご鏂囦歡閲岀殑娉ㄩ噴銆備絾姣曠珶 C 鎺ュ彛姣擟OM綆鍗曞緱澶氾紝鐪嬬湅鍑芥暟鍚嶅拰鏍蜂緥涔熷氨浼氱敤浜嗐備絾娌?/p>
鏈変腑鏂囪祫鏂欙紝涓嶇埍鐪嬭嫳鏂囩殑鍙兘浼氬ご鐥涖傚彲鑳界殑璇濆ぇ瀹跺垎宸ョ炕璇戜竴涓嬶紝姣曠珶姣擠X鏂囨。灝戝浜嗐?/p>
璇︾粏淇℃伅鍦ㄥ摢閲岋紵
http://www.delphi-jedi.org/ Delphi鎺ュ彛欏圭洰棣栭〉
http://jsdl.sourceforge.net/ Java鎺ュ彛棣栭〉
http://csgl.sourceforge.net C#鎺ュ彛棣栭〉
http://phpsdl.sourceforge.net php鎺ュ彛棣栭〉 浣跨敤SDL鐨勬父鎴忔湁鍝簺錛?br />http://www.libsdl.org/games.php
銆銆鍦ㄨ繖涓緥瀛愰噷鎴戜滑灝嗗涔犲浣曚嬌鐢⊿DL紼嬪簭涓墦寮鍜屾樉紺哄浘鐗囥傜ず渚嬬▼搴忓皢緇樺埗涓涓紓浜殑鑳屾櫙錛屼笂闈㈡樉紺轟竴涓鏂瑰艦鍥炬錛屽茍鍙互浣跨敤閿洏鐨勬柟鍚戦敭縐誨姩瀹冦傚鏋滄瘮杈冪啛鎮(zhèn)夆滄帹綆卞瓙鈥濊繖涓父鎴忥紝鍙互鐪嬪嚭榪欎釜紼嬪簭瀹為檯灝辨槸鎺ㄧ瀛愭父鎴忕殑鍩虹銆?br />
銆銆鍦ㄧ▼搴忛閮ㄥ寘鍚互涓嬪ご鏂囦歡(stdlib.h渚涜皟鐢╝texit()鏃朵嬌鐢?錛?br />#include <stdio.h>
#include <stdlib.h>
#include 鈥淪DL.h鈥?/td>
銆銆澹版槑3涓猄DL_Surface綾誨瀷鐨勫叏灞鍙橀噺錛屽悓鏃跺0鏄?涓暣鍨嬪彉閲忕敤浜庤褰曟鏂瑰艦鐨勫潗鏍囷細SDL_Surface *back;
SDL_Surface *image;
SDL_Surface *screen;
int xpos = 0, ypos = 0;
銆銆鎴戜滑鏋勯犱竴涓嚱鏁癐nitImage鍑芥暟鏉ユ墦寮bitmap鏂囦歡(.bmp)涓殑鍥懼儚淇℃伅錛屼紶閫掔粰SDL_Surface鏄劇ず銆侷nitImage灝嗕細琚玬ain()鍑芥暟璋冪敤銆傚湪InitImage鍑芥暟涓垜浠嬌鐢ㄥ埌浜哠DL_LoadBMP鍑芥暟錛屽畠鎶奲mp鏂囦歡鐨勬枃浠跺悕浣滀負鍙傛暟浼犲叆錛岃繑鍥炴寚鍚戝瓨鍌ㄥ浘鍍忔枃浠朵俊鎭唴瀛樺尯鍩熺殑鎸囬拡銆侷nitImage涓垜浠皢鑳屾櫙鍥劇墖bg.bmp鎵撳紑騫朵嬌鐢╞ack鎸囬拡榪涜璁板綍錛屽皢姝f柟褰㈠浘鐗噄mage.bmp鎵撳紑騫朵嬌鐢╥mage鎸囬拡璁板綍銆?br />int InitImages()
{
銆back = SDL_LoadBMP("bg.bmp");
銆image = SDL_LoadBMP("image.bmp");
銆return 0;
}
銆銆涓嬮潰鎴戜滑浠嬬粛灝嗗浘鍍忕粯鍒跺埌灞忓箷鐨勪袱涓嚱鏁幫紝涓や釜鍑芥暟閮借鍛藉悕涓篋rawIMG銆傜涓涓狣rawIMG鍑芥暟浣跨敤SDL_BlitSurface鍑芥暟鏉ュ湪灞忓箷涓婃樉紺哄浘鍍忋傚湪SDL涓璖DL_BliSurface鐨勫嚱鏁板師鍨嬪涓嬶細int SDL_BlitSurface(SDL_Surface *src, SDL_Rect *srcrect,
SDL_Surface *dst, SDL_Rect *dstrect);
銆銆src鏄渶瑕佽繘琛岀粯鍒剁殑surface鑰宒st鏄繘琛屾樉紺虹殑surface銆係DL_Rect鏄竴涓寘鍚?涓?6浣嶆暣鍨嬪彉閲忕殑緇撴瀯錛歺, y, w(width)鍜宧(height)銆俿rcrect鐢ㄦ潵鎻忚堪婧恠urface涓渶瑕佺粯鍒墮儴鍒嗭紝鑰宒strect鐢ㄦ潵鎻忚堪鍦ㄧ洰鐨剆urface浣曞榪涜緇樺埗銆傚鏋滆緗畇rcrect涓篘ULL錛岄偅涔堟簮鏂囦歡涓寘鍚殑鏁翠釜鍥懼儚閮戒細琚樉紺恒俤strect涓殑x鍜寉鍙橀噺鎸囧畾浜嗗湪浣曞blit SDL_Surface src銆傚浜巇strect鏉ヨ錛寃(width)鍜宧(height)榪欎袱涓彉閲忔槸琚拷鐣ヤ笉璁$殑銆傜涓涓狣rawIMG鍑芥暟闈炲父綆鍗曪細void DrawIMG(SDL_Surface *img, int x, int y)
{
銆SDL_Rect dest;
銆dest.x = x;
銆dest.y = y;
銆SDL_BlitSurface(img, NULL, screen, &dest);
}
銆銆涓嬮潰鎴戜滑鑰冭檻涓涓鏉傜偣鐨勬儏鍐碉紝濡傚浘錛?br />
銆銆濡傛灉鎴戜滑闇瑕佸皢闃村獎鍖哄煙浼犻掔粰srcrect榪涜緇樺埗錛屾垜浠氨闇瑕佷嬌鐢ㄥ埌srcrect緇撴瀯閲岀殑鍑犱釜鍙橀噺浜?x,y鎸囧畾浜嗘墍瑕佺粯鍒剁殑婧愬尯鍩熺殑璧風偣鍧愭爣錛岃寃鍜宧鍒嗗埆鎸囧畾浜嗘簮鍖哄煙鐨勫搴﹀拰楂樺害銆傚鏋滃浘涓殑闃村獎鍧愭爣璧風偣鍧愭爣涓?20,25)錛屽61涓薄绱犻珮70涓薄绱狅紝閭d箞鎴戜滑鍙互寰楀埌錛歴rcrect涓瓁 = 20, y = 25, w = 61, h = 70銆?br />
銆銆絎簩涓狣rawIMG瀹氫箟濡備笅錛?br />void DrawIMG(SDL_Surface *img, int x, int y, int w, int h, int x2, int y2)
{
銆SDL_Rect dest;
銆dest.x = x;
銆dest.y = y;
銆SDL_Rect dest2;
銆dest2.x = x2;
銆dest2.y = y2;
銆dest2.w = w;
銆dest2.h = h;
銆SDL_BlitSurface(img, &dest2, screen, &dest);
}
銆銆緇樺埗鑳屾櫙鐨勫嚱鏁癉rawBG()姣旇緝綆鍗?void DrawBG()
{
銆Slock(screen);
銆DrawIMG(back, 0, 0);
銆Sulock(screen);
}
銆銆緇樺埗姝f柟褰㈠浘鍍忕殑鍑芥暟灝嗕細姣旇緝澶嶆潅錛岄鍏堟垜浠敤鑳屾櫙鍥炬濉厖褰撳墠姝f柟褰㈠浘鍍忔墍鍦ㄥ尯鍩燂紝濡傛灉涓嶈繖鏍峰仛鐨勮瘽錛屾鏂瑰艦鍥懼儚鐨勭Щ鍔ㄥ氨浼氶犳垚鑳屾櫙涓婄暀涓嬮粦鑹茬殑鏂瑰艦縐誨姩杞ㄨ抗錛屽鍥炬墍紺猴細
銆銆榪欓噷錛屾垜浠彧濉厖姝f柟褰㈠浘鍍忕Щ鍔ㄥ悗鐨勮建榪瑰尯鍩燂紝榪欐牱姣斿~鍏呮暣涓尯鍩熼熷害蹇傜敱浜庢鏂瑰艦鍖哄煙澶у皬鏄?28x128錛岀敱浜庢瘡嬈℃鏂瑰艦鍙兘鏈濇煇涓柟鍚戠Щ鍔?涓薄绱?pixel),涓轟簡褰誨簳娑堥櫎縐誨姩杞ㄨ抗錛屾垜浠儗鏅殑鏂板~鍏呭尯鍩熸墿澶у埌132x132錛岃繖鏍峰氨鍙互瀹屽叏瑕嗙洊鐢變簬縐誨姩閫犳垚鐨勮建榪規(guī)畫鐣欍傛渶鍚庝嬌鐢⊿DL_Flip瀵規(guī)柊鐨勫浘鍍忕粯鍒跺尯鍩熻繘琛屾洿鏂般傚嚱鏁板涓嬶細void DrawScene()
{
銆Slock(screen);
銆DrawIMG(back, xpos-2, ypos-2, 132, 132, xpos-2, ypos-2);
銆DrawIMG(image, xpos, ypos);
銆SDL_Flip(screen);
銆Sulock(screen);
}
銆銆鐢變簬瑕佺Щ鍔ㄦ鏂瑰艦鍥懼儚錛屾垜浠渶瑕佸閿洏鐨勬柟鍚戦敭鐨勬寜涓嬩簨浠惰繘琛屽搷搴旓紝鍥犳鍦╩ain鍑芥暟寮濮嬫椂瀹氫箟錛?br />Uint8* keys錛?/td>
銆銆keys鐢ㄦ潵鑾峰緱姣忎竴鏃墮棿鐨勯敭鐩樼姸鎬併傝幏寰楅敭鐩樼姸鎬佺殑鍑芥暟涓篠DL_GetKeyState(),瀹冭繑鍥炰竴涓寚鍚慤in8綾誨瀷鐨勬暟緇勫ご閮ㄧ殑鎸囬拡銆傛暟緇勭殑姣忎釜鍏冪礌閮藉搴旇褰曚簡鏌愪釜鎸夐敭鏄惁琚寜涓嬬殑鏍囧織銆傝繖閲岀殑瀹炵幇錛屾垜浠笉鍦ㄤ簨浠惰疆璇DL_PollEvent涓鏌ユ寜閿紝鍥犱負浜嬩歡杞涓槸鍙湁瑙﹀彂浜嬩歡涔熷嵆SDL_PollEvent(&event) == 1鎵嶈兘榪涘叆寰幆鐨勶紝鍥犺屽鏋滄垜浠竴鐩存寜涓嬫煇閿笉鏀懼紑鏄笉浼氳Е鍙戞柊鐨勪簨浠跺彂鐢熺殑錛岃浣垮緱姝f柟褰㈢Щ鍔ㄦ垜浠繀欏諱竴涓嬪張涓涓嬬殑鏁插嚮鏌愪釜鏂瑰悜閿紝鏄劇ず榪欎笉鏄垜浠墍瑕佺殑銆傛垜浠笇鏈涙槸鎸変笅鏌愰敭涓嶆斁寮鐨勮瘽錛屾鏂瑰艦涓鐩翠繚鎸佸悜姝ゆ柟鍚戠Щ鍔ㄣ傚洜姝ゆ垜浠皢媯鏌ユ寜閿殑紼嬪簭孌墊斁鍒頒簨浠惰疆璇箣鍚庡鐞嗐傝繖閲屾病鏈変嬌鐢╡lse if鈥︾粨鏋勶紝鍥犳鍙互澶氫釜鏂瑰悜閿悓鏃舵寜涓嬭繘琛岀Щ鍔紝紼嬪簭孌靛涓嬶細int done=0;
while(done == 0)
{
銆SDL_Event event;
銆while ( SDL_PollEvent(&event) )
銆{
銆銆if ( event.type == SDL_QUIT ) { done = 1; }
銆銆if ( event.type == SDL_KEYDOWN )
銆銆{
銆銆銆if ( event.key.keysym.sym == SDLK_ESCAPE ) { done = 1; }
銆銆}
銆}
銆keys = SDL_GetKeyState(NULL);
銆if ( keys[SDLK_UP] ) { ypos -= 1; }
銆if ( keys[SDLK_DOWN] ) { ypos += 1; }
銆if ( keys[SDLK_LEFT] ) { xpos -= 1; }
銆if ( keys[SDLK_RIGHT] ) { xpos += 1; }
銆DrawScene();
}
銆銆紼嬪簭榪愯緇撴灉濡備笅錛堟垜浠凡緇忓皢姝f柟褰㈠浘鍍忓尯鍩熺Щ鍔ㄥ埌浜嗙獥鍙d腑澶級錛?br />
銆銆濡傛灉鎯沖涔犳湰紼嬪簭鐨勫畬鏁翠唬鐮侊紝鍙互浠庝互涓嬪湴鍧涓嬭澆錛歨ttp://cone3d.gamedev.net/cgi-bin/index.pl?page=tutorials/gfxsdl/download.pl?file=lesson2.zip&blah=1
銆銆浠ヤ笂鎴戜滑綆鍗曚粙緇嶄簡VC6涓婼DL鐨勫畨瑁呭拰綆鍗曞簲鐢紝騫朵婦浜嗕袱涓皬渚嬪瓙錛屽綋鐒禨DL鐨勫姛鑳借繙榪滀笉姝㈣繖浜涳紝鍖呮嫭闊抽銆佸畾鏃跺櫒鍜岀嚎紼嬬紪紼嬬瓑絳夛紝榪欓噷灝變笉涓涓槌屾暟浜嗐傚鏋滄湁鍏磋叮錛孲DL瀹樻柟緗戠珯鎻愪緵浜嗛潪甯歌灝界殑鍑芥暟璇存槑銆佹枃妗e拰浣跨敤鎸囧崡錛屼綘鍙互鍦ㄧ綉绔欎笂鑾峰彇闈炲父澶氱殑淇℃伅銆傜敱浜嶴DL鏄法騫沖彴鍜屽紑鍙戝伐鍏風殑錛屾柟渚挎父鎴忓湪鍚勭騫沖彴涓嬬殑縐繪錛屽悓鏃惰繕鏀寔甯哥敤鐨勫悇縐嶅紑鍙戣璦銆傚洜姝わ紝鏈夎凍澶熺殑鐞嗙敱鐩鎬俊錛屽湪娓告垙浜т笟钃媰鍙戝睍鐨勪粖澶╋紝SDL涓瀹氫細寰楀埌鏇村寮鍙戣呯殑闈掔潗錛岀敤瀹冨紑鍙戝嚭鍚勭鏈夎叮鐨勬父鎴忔潵銆?
]]>
銆銆涓嬫枃浠庝嬌鐢⊿DL鐨勭紪紼嬪嚱鏁板紑濮嬶紝浠嬬粛浜嗗浣曚嬌鐢⊿DL鍦ㄥ睆騫曚笂榪涜璞$礌緇樺埗鐨勫熀鏈煡璇嗭紝騫剁粰鍑轟簡涓涓畝鍗曠殑渚嬪瓙銆?br />
銆銆濡傛灉瑕佸湪VC涓敤SDL搴擄紝蹇呴』鍦ㄦ簮鏂囦歡澶撮儴鍖呭惈浠ヤ笅澶存枃浠訛細#include 鈥淪DL.h鈥?/td>
銆銆鍒濆鍖朣DL鏄氳繃SDL_Init()鍑芥暟鏉ュ疄鐜扮殑銆傚鏋滃垵濮嬪寲澶辮觸錛屽嚱鏁拌繑鍥炲間負0銆傚嚱鏁板彧鎺ュ彈鍒濆鍖栧璞′綔涓哄弬鏁般傚鏋滆鍒濆鍖栬棰戝睆騫曪紝浼犲叆甯告暟SDL_INIT_VIDEO浣滀負鍙傛暟錛涘垵濮嬪寲闊抽錛屼紶鍏ュ父鏁癝DL_INIT_AUDIO錛涘鏋滃悓鏃跺垵濮嬪寲瑙嗛鍜岄煶棰戯紝浼犲叆SDL_INIT_VIDEO|SDL_INIT_AUDIO銆傚叾瀹冭繕鏈変竴浜涢噺鍙互浼犲叆浣滀負鍙傛暟鐨勶紙濡傛灉鍚屾椂浼犲叆澶氫釜閲忚浣跨敤|灝嗗畠浠殧寮錛夛細SDL_INIT_TIMER
SDL_INIT_AUDIO
SDL_INIT_VIDEO
SDL_INIT_CDROM
SDL_INIT_JOYSTICK
SDL_INIT_NOPARACHUATE
SDL_INIT_EVENTTHREAD
SDL_INIT_EVERYTHING
銆銆濡傛灉鎴戜滑瑕佸垵濮嬪寲錛屽彲浠ヤ嬌鐢ㄥ涓嬭鍙ワ細if ( SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO) < 0 )
{
銆printf(鈥淯nable to init SDL: %s\n鈥? SDL_GetError());
銆return 1;
}
銆銆濡傛灉鍒濆鍖栧け璐ワ紝鍒欏嚱鏁癝DL_GetError()榪斿洖鍏充簬閿欒鐨勪竴涓瓧絎︿覆鎻愮ず淇℃伅銆?br />
銆銆褰撲粠浣犵殑C++璇彞榪斿洖鏃訛紝璁頒綇浣跨敤SDL_Quit()榪涜紼嬪簭鐨勬竻鐞嗗伐浣滐紝鍚﹀垯灝變細鍑虹幇濂囨殑鐜拌薄銆傚彲浠ヤ嬌鐢ㄥ涓嬭鍙ヨ繘琛屾弿榪幫細atexit(SDL_Quit);
銆銆榪欐牱鐨勮瘽灝變笉闇瑕佸湪main鍑芥暟涓瘡涓猺eturn璇彞鍓嶅姞鍏DL_Quit()浜嗐?br />
銆銆鍦⊿DL涓綘鍙互鎷ユ湁澶氫釜surface錛屾瘡浠剁墿浣撻兘鏄竴涓猻urface銆備綘鍙互鍦ㄤ竴涓猻urface涓婅繘琛岀粯鍥炬垨鑰呭湪鍏朵粬surface涓婄粯鍒跺彟澶栦竴涓猻urface銆傜▼搴忎腑涓涓猻urface鐨勮〃紺哄嵆涓烘寚鍚戠粨鏋凷DL_Surface鐨勬寚閽堛傚鏋滆鑾峰緱涓涓猻urface鍙濡備笅瀹氫箟錛?br />SDL_Surface *screen;
銆銆濡傛灉闇瑕佸screen鎵鎸囧悜鐨剆urface涓婅繘琛岀粯鍥撅紝浣犲彲浠ヤ嬌鐢ㄥ嚱鏁癝DL_SetVideoMode()鏉ヨ緗睆騫曞垎杈ㄧ巼錛?br />screen = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
銆銆鍓嶄笁涓弬鏁板垎鍒負灞忓箷瀹藉害錛岄珮搴﹀拰灞忓箷涓婄殑姣忚薄绱犲寘鍚殑浣嶆暟(bits per pixel, BPP)銆傚鏋滃~鍏?鍒橲DL鑷姩閫夋嫨鏈鍚堥傜殑BPP銆傜鍥涗釜鍙傛暟鐢ㄦ潵緇欏嚭鏌愪簺鐗規(guī)畩鏍囧織浣嶃傚鏋滆鍦ㄥ睆騫曚笂榪涜鍥懼艦緇樺埗灝卞繀欏諱嬌鐢⊿DL_HWSURFACE鎴栬匰DL_SWSURFACE銆備互涓嬬粰鍑轟簡涓涓綘鍙互鎸囧畾鐨勬爣蹇椾綅錛?br />
銆銆SDL_SWSURFACE:鍦ㄧ郴緇熷唴瀛樹腑鍒涘緩瑙嗛Surface
銆銆SDL_HWSURFACE:鍦ㄨ棰戝唴瀛樹腑鍒涘緩瑙嗛Surface
銆銆SDL_ASYNCBLIT:鍏佽鍦ㄦ樉紺簊urface涓婁嬌鐢ㄥ紓姝ユ洿鏂般傚湪鍗旵PU鏈哄櫒涓婁細鍙樻參錛屼絾鍦⊿MP緋葷粺涓婁細鏈夋樉钁楃殑鎬ц兘鎻愬崌銆?br />
銆銆SDL_ANYFORMAT:涓鑸殑錛屽鏋滄寚瀹氫綅鏁扮殑bpp涓嶅彲鐢紝閭d箞SDL灝變細妯℃嫙浣跨敤闃村獎surface銆傚鏋滀紶鍏DL_ANYFORMAT灝變細闃繪榪欐牱鍋氾紝騫朵笖涓嶇鑹叉繁寮哄埗浣跨敤瑙嗛surface銆?br />
銆銆SDL_HWPALETTE:緇欎簣SDL鐗硅鐨勭敾鐩樼殑璁塊棶鏉冿紝浣跨敤榪欎釜鏍囧織浣嶅氨涓嶉渶瑕佹繪槸浣跨敤SDL_SetColors鎴栬匰DL_SetPalette鏉ヨ幏鍙栨墍闇鐨勯鑹層?br />
銆銆SDL_DOUBLEBUF:鍏佽紜歡鍙岀紦鍐詫紱鍙槸鍜孲DL_HWSURFACE涓璧蜂嬌鐢ㄦ椂姣旇緝鏈夌敤銆傝皟鐢⊿DL_Flip灝嗕細flip鏁翠釜緙撳啿騫朵笖鏇存柊灞忓箷銆傛墍鏈夌殑緇樺埗灝嗕細鍦ㄥ綋鍓嶆湭鏄劇ず鐨剆urface涓婂彂鐢熴傚鏋滃弻緙撳啿琚厑璁革紝閭d箞SDL_Flip灝嗕細瀵規(guī)暣涓睆騫曡繘琛孲DL_UpdateRect鎿嶄綔銆?br />
銆銆SDL_FULLSCREEN:SDL灝嗕細灝濊瘯浣跨敤鍏ㄥ睆妯″紡銆傚鏋滅‖浠跺垎杈ㄧ巼鐨勮皟鏁寸敱浜庢煇縐嶆儏鍐墊棤娉曞畬鎴愶紝閭d箞涓嬩竴涓◢楂樼殑鍒嗚鯨鐜囧皢浼氳浣跨敤錛屽茍涓旀樉紺虹獥鍙e皢浼氬浜庝竴涓粦鑹茶儗鏅殑涓ぎ銆?br />
銆銆SDL_OPENGL:鍒涘緩涓涓狾PENGL rendering context銆備嬌鐢ㄥ墠蹇呴』宸茬粡浣跨敤SDL_GL_SetAttribute瀵筄penGL瑙嗛灞炴ц繘琛岃緗?br />
銆銆SDL_OPENGLBLIT: 鍜屼笂涓涓夐」涓鏍峰垱寤轟竴涓?OPENGL rendering context, 浣嗘槸鍏佽浣跨敤姝e父鐨刡litting鎿嶄綔銆?br />
銆銆SDL_RESIZABLE; 鍒涘緩涓涓彲浼哥緝澶у皬鐨勭獥鍙c傚綋鐢ㄦ埛璋冩暣紿楀彛澶у皬鏃訛紝灝嗕細瑙﹀彂涓涓猄DL_VIDEORESIZE浜嬩歡錛孲DL_SetVideoMode灝嗕細浣跨敤鏂板ぇ灝忎綔涓哄弬鏁板啀嬈¤璋冪敤銆?br />
銆銆SDL_NOFRAME: 濡傛灉鍙互鐨勮瘽錛孲DL_NOFRAME灝嗕細鍒涘緩鍑轟竴涓病鏈夋爣棰樻爮鍜岃竟鐣屼慨楗扮殑紿楀彛錛屽叏灞忔柟寮忚嚜鍔ㄨ緗鏍囧織浣嶃?br />
銆銆寤鴻浣跨敤SDL_HWSURFACE | SDL_DOUBLEBUF錛屽鏋滃嚭鐜伴敊璇彲浠ュ皾璇曚嬌鐢⊿DL_SWSURFACE銆?br />
銆銆SDL_SetVideoMode濡傛灉鎿嶄綔鎴愬姛錛屽垯榪斿洖涓涓寚鍚慡DL_Surface鐨勬寚閽堬紝鍚﹀垯鐨勮瘽榪斿洖NULL銆傚彲浠ヤ嬌鐢ㄥ涓嬭鍙ユ鏌ュ彂鐢熺殑閿欒錛?br />If ( screen == NULL )
{
銆printf(鈥淯nable to set 640x480 video: %s\n鈥? SDL_GetError());
銆return 1;
}
銆銆浠ヤ笂浠嬬粛浜嗗浣曞SDL榪涜鍒濆鍖栵紝涓嬮潰鍙互寮濮嬬粯鍒朵簡銆備絾鏄繕鏈変竴浜涢渶瑕佹敞鎰忕殑鍏抽敭鍦版柟錛岄鍏堟槸涓浜汼DL浣跨敤鐨勫鏄撹浜轟駭鐢熻糠鎯戠殑鏁版嵁綾誨瀷錛?br />Uint8 鈥?鐩稿綋浜巙nsigned char
Uint16 鈥?16浣?2瀛楄妭) unsigned integer
Uint32 鈥?32浣?4瀛楄妭) unsigned integer
Uint64 - 64浣?8瀛楄妭) unsigned integer
Sint8 鈥?鐩稿綋浜巗igned char
Sint16 鈥?16浣?2瀛楄妭) signed integer
Sint32 鈥?32浣?4瀛楄妭) signed integer
Sint64 - 64浣?8瀛楄妭) signed integer
銆銆榪樻湁錛屾湁鐨勬椂鍊欏鏋滃垵濮嬪寲鍑虹幇閿欒錛屾病蹇呰瀹屽叏閫鍑恒備緥濡傚綋鍒濆鍖栦簡SDL_INIT_VIDEO鑰屾病鏈夊垵濮嬪寲SDL_INIT_AUDIO錛岄偅涔堜綘鍙互緇х畫榪欎釜閿欒鍙槸娌℃湁闊抽鑰屽凡銆傝媯鏌ユ槸鍚﹂煶棰戝垵濮嬪寲鏄惁鎴愬姛錛屽彲浠ヤ嬌鐢⊿DL_WasInit()鍑芥暟鏉ユ鏌ャ備笅闈㈡槸涓涓緥瀛愶細Uint32 init = SDL_WasInit(SDL_INIT_AUDIO);
If (init & SDL_INIT_AUDIO)
{
銆sound = 1;
} else {
銆sound = 0;
}
銆銆浣犲彲浠ュ湪紼嬪簭鍒濆鍖栫殑鏌愪簺鍦版柟鍔犲叆浠ヤ笂璇彞銆?br />
銆銆浠ヤ笅鏄疭DL浠嬬粛涓繘琛岃薄绱犵粯鍒剁殑璇彞錛屽彲浠ユ殏鏃朵笉闇瑕佸畬鍏ㄤ簡瑙e叾涓殑鎰忔濓細void DrawPixel(SDL_Surface *screen, int x, int y, Uint8 R, Uint8 G, Uint8 B)
{
銆Uint32 color = SDL_MapRGB(screen->format, R, G, B);
銆switch (screen->format->BytesPerPixel)
銆{
銆銆case 1: // Assuming 8-bpp
銆銆{
銆銆銆Uint8 *bufp;
銆銆銆bufp = (Uint8 *)screen->pixels + y*screen->pitch + x;
銆銆銆*bufp = color;
銆銆}
銆銆break;
銆銆case 2: // Probably 15-bpp or 16-bpp
銆銆{
銆銆銆Uint16 *bufp;
銆銆銆bufp = (Uint16 *)screen->pixels + y*screen->pitch/2 + x;
銆銆銆*bufp = color;
銆銆}
銆銆break;
銆銆case 3: // Slow 24-bpp mode, usually not used
銆銆{
銆銆銆Uint8 *bufp;
銆銆銆bufp = (Uint8 *)screen->pixels + y*screen->pitch + x * 3;
銆銆銆if(SDL_BYTEORDER == SDL_LIL_ENDIAN)
銆銆銆{
銆銆銆銆bufp[0] = color;
銆銆銆銆bufp[1] = color >> 8;
銆銆銆銆bufp[2] = color >> 16;
銆銆銆} else{
銆銆銆銆bufp[2] = color;
銆銆銆銆bufp[1] = color >> 8;
銆銆銆銆bufp[0] = color >> 16;
銆銆銆}
銆銆}
銆銆break;
銆銆case 4: // Probably 32-bpp
銆銆{
銆銆銆Uint32 *bufp;
銆銆銆bufp = (Uint32 *)screen->pixels + y*screen->pitch/4 + x;
銆銆銆*bufp = color;
銆銆}
銆銆break;
銆}
}
銆銆閫氳繃榪欎釜鍑芥暟錛屽彲浠ヤ紶閫掔粰surface瑕佺粯鍒剁殑鐐圭殑(x,y)鍧愭爣鍜孯GB鍊箋?br />聽銆銆鍚屾椂錛岀敱浜庣粯鍒剁殑灞忓箷涓嶈兘鍚屾椂鎺ュ彈涓や釜鍑芥暟鐨勫悓鏃舵搷浣滐紝鎴戜滑闇瑕佸叾浠栦袱涓緟鍔╁嚱鏁幫紝鐢ㄤ簬鍦ㄧ粯鍒跺墠瀵瑰睆騫曡繘琛岄攣瀹氾紝浠ュ強鍦ㄧ粯鍒跺畬鎴愪箣鍚庤В闄ら攣瀹氥傝繖涓や釜宸ヤ綔涓鑸敱SDL_MUSTLOK(SDL_Surface *screen)鍜孲DL_UnlockSurface(SDL_Surface *screen)瀹屾垚銆備嬌鐢ㄥ涓嬩袱涓嚜瀹氫箟鐨勫嚱鏁頒細鏇村姞綆鍗曪細void Slock(SDL_Surface *screen)
{
銆if ( SDL_MUSTLOCK(screen) )
銆{
銆銆if ( SDL_LockSurface(screen) < 0 )
銆銆{
銆銆銆return;
銆銆}
銆}
}
void Sulock(SDL_Surface *screen)
{
銆if ( SDL_MUSTLOCK(screen) )
銆{
銆銆SDL_UnlockSurface(screen);
銆}
}
銆銆榪欐牱錛屾垜浠彲浠ュ緱鍒頒竴涓畝鍗曠殑涓葷▼搴忔鏋跺涓嬶細#include <stdio.h>
#include <stdlib.h>
#include "SDL.h"
// The functions are not shown to save space
void DrawPixel(SDL_Surface *screen, int x, int y, Uint8 R, Uint8 G, Uint8 B);
void Slock(SDL_Surface *screen);
void Sulock(SDL_Surface *screen);
int main(int argc, char *argv[])
{
銆if ( SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO) < 0 )
銆{
銆銆printf("Unable to init SDL: %s\n", SDL_GetError());
銆銆exit(1);
銆}
銆atexit(SDL_Quit);
銆SDL_Surface *screen;
銆screen=SDL_SetVideoMode(640,480,32,SDL_HWSURFACE|SDL_DOUBLEBUF);
銆if ( screen == NULL )
銆{
銆銆printf("Unable to set 640x480 video: %s\n", SDL_GetError());
銆銆exit(1);
銆}
銆// DRAWING GOES HERE
銆return 0;
}
銆銆濡傛灉瀵硅紼嬪簭榪涜緙栬瘧榪愯錛岄偅涔堝彧鑳藉緱鍒頒竴闂岃繃鐨勪竴涓粦鑹茬殑紿楀彛銆傛垜浠渶瑕佸紿楀彛榪涜緇樺埗錛屽茍涓斿鍩烘湰鐨勯敭鐩橀紶鏍囦簨浠惰繘琛屽鐞嗐?br />
銆銆緇樺埗鐨勫熀鏈師鐞嗘槸錛屽厛鍦ㄧ紦鍐插尯緇樺埗錛屽啀涓嬈℃у皢緙撳啿鍖虹粯鍒跺埌灞忓箷涓娿傝繖鏍鋒瘮璧蜂竴嬈′竴涓薄绱犵偣鍦ㄥ睆騫曚笂緇樺浘鐨勬柟寮忔晥鐜囨洿楂橈紝閫熷害鏇村揩錛屼篃涓嶆槗鍑洪敊銆傞鍏堜嬌鐢ㄥ驚鐜湪screen鎵鎸囧悜鐨剆urface(緙撳啿鍖?涓婄粯鍒訛紝鐒跺悗璋冪敤SDL_Flip鍑芥暟灝唖creen surface緇樺埗鍒扮湡瀹炵數(shù)鑴戝睆騫曚笂銆係DL_Flip鍑芥暟鐨勪綔鐢ㄦ槸錛氬湪鏀寔鍙岀紦鍐?double-buffering)鐨勭‖浠朵笂錛屽緩绔媐lip騫惰繑鍥炪傜‖浠跺皢絳夊緟vertical retrace,鐒跺悗鍦ㄤ笅涓涓棰憇urface blit鎴栬呮墽琛岄攣瀹氳繑鍥炲墠浜ゆ崲瑙嗛緙撳啿鍖恒傚鏋滅‖浠朵笉鏀寔鍙岀紦鍐詫紝閭d箞絳夊悓浜庤皟鐢⊿DL_UpdateRect(screen, 0, 0, 0, 0)錛屽嵆瀵規(guī)暣涓猻creen鐨勭粯鍒跺尯鍩熻繘琛屽埛鏂般?br />void DrawScene(SDL_Surface *screen)
{
銆Slock(screen);
銆for(int x=0;x<640;x++)
銆{
銆銆for(int y=0;y<480;y++)
銆銆{
銆銆銆DrawPixel(screen, x,y,y/2,y/2,x/3);
銆銆}
銆}
銆Sulock(screen);
銆SDL_Flip(screen);
}
銆銆鍦⊿DL涓閲囩敤緇撴瀯SDL_Event鏉ユ弿榪頒簨浠訛紝騫墮噰鐢ㄨ疆璇㈢殑鏈哄埗瀵逛簨浠惰繘琛屽鐞嗭紝紼嬪簭涓嬌鐢ㄤ竴涓猄DL_Event鐨勫疄渚?Instance)鏉ユ鏌ヤ簨浠剁殑鍙戠敓錛?br />SDL_Event event;
銆銆杞閲囩敤while寰幆鏉ユ鏌ワ細while ( SDL_PollEvent(&event))
{
銆if ( event.type == SDL_QUIT)
銆{
銆銆//code here鈥?
銆}
銆if ( event.type == SDL_KEYDOWN)
銆{
銆銆//code here鈥?
銆}
銆//鈥?.
}
銆銆浜嬩歡杞瀹屾瘯涔嬪悗錛岃皟鐢―rawScene(sreen)榪涜涓嬈$粯鍒躲偮?br />
聽聽聽聽聽聽聽聽聽鏈緥涓殑婧愪唬鐮佸涓嬶細#include <stdio.h>
#include <stdlib.h>
#include "SDL.h"
void Slock(SDL_Surface *screen)
{
銆if ( SDL_MUSTLOCK(screen) )
銆{
銆銆if ( SDL_LockSurface(screen) < 0 )
銆銆{
銆銆銆return;
銆銆}
銆}
}
void Sulock(SDL_Surface *screen)
{
銆if ( SDL_MUSTLOCK(screen) )
銆{
銆銆SDL_UnlockSurface(screen);
銆}
}
void DrawPixel(SDL_Surface *screen, int x, int y,
Uint8 R, Uint8 G, Uint8 B)
{
銆Uint32 color = SDL_MapRGB(screen->format, R, G, B);
銆switch (screen->format->BytesPerPixel)
銆{
銆銆case 1: // Assuming 8-bpp
銆銆{
銆銆銆Uint8 *bufp;
銆銆銆bufp = (Uint8 *)screen->pixels + y*screen->pitch + x;
銆銆銆*bufp = color;
銆銆}
銆銆break;
銆銆case 2: // Probably 15-bpp or 16-bpp
銆銆{
銆銆銆Uint16 *bufp;
銆銆銆bufp = (Uint16 *)screen->pixels + y*screen->pitch/2 + x;
銆銆銆*bufp = color;
銆銆}
銆銆break;
銆銆case 3: // Slow 24-bpp mode, usually not used
銆銆{
銆銆銆Uint8 *bufp;
銆銆銆bufp = (Uint8 *)screen->pixels + y*screen->pitch + x * 3;
銆銆銆if(SDL_BYTEORDER == SDL_LIL_ENDIAN)
銆銆銆{
銆銆銆銆bufp[0] = color;
銆銆銆銆bufp[1] = color >> 8;
銆銆銆銆bufp[2] = color >> 16;
銆銆銆} else {
銆銆銆銆bufp[2] = color;
銆銆銆銆bufp[1] = color >> 8;
銆銆銆銆bufp[0] = color >> 16;
銆銆銆}
銆銆}
銆銆break;
銆銆case 4: // Probably 32-bpp
銆銆{
銆銆銆Uint32 *bufp;
銆銆銆bufp = (Uint32 *)screen->pixels + y*screen->pitch/4 + x;
銆銆銆*bufp = color;
銆銆}
銆銆break;
銆}
}
void DrawScene(SDL_Surface *screen)
{
銆Slock(screen);
銆for(int x=0;x<640;x++)
銆{
銆銆for(int y=0;y<480;y++)
銆銆{
銆銆銆DrawPixel(screen, x,y,y/2,y/2,x/3);
銆銆}
銆}
銆Sulock(screen);
銆SDL_Flip(screen);
}
int main(int argc, char *argv[])
{
銆if ( SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO) < 0 )
銆{
銆銆printf("Unable to init SDL: %s\n", SDL_GetError());
銆銆exit(1);
銆}
銆atexit(SDL_Quit);
銆SDL_Surface *screen;
銆screen=SDL_SetVideoMode(640,480,32,SDL_HWSURFACE|SDL_DOUBLEBUF);
銆if ( screen == NULL )
銆{
銆銆printf("Unable to set 640x480 video: %s\n", SDL_GetError());
銆銆exit(1);
銆}
銆int done=0;
銆while(done == 0)
銆{
銆銆SDL_Event event;
銆銆while ( SDL_PollEvent(&event) )
銆銆{
銆銆銆if ( event.type == SDL_QUIT ) { done = 1; }
銆銆銆if ( event.type == SDL_KEYDOWN )
銆銆銆{
銆銆銆銆if ( event.key.keysym.sym == SDLK_ESCAPE ) { done = 1; }
銆銆銆}
銆銆}
銆銆DrawScene(screen);
銆}
銆return 0;
}
銆銆紼嬪簭榪愯緇撴灉濡備笅錛?br />
]]>
鍥?
銆銆涓嬮潰鎴戜滑鎵撳紑Visual Studio6.0錛屽紑鍙戜竴涓潪甯哥畝鍗曠殑灝忎緥瀛愩傞夋嫨File->New,鏂板緩涓涓伐紼嬶紝閫夋嫨Win32 Application,灝嗗伐紼媑p淇濆瓨涓簍utorial鐩綍涓嬶紝濡傚浘3鎵紺恒?br />
鍥?
銆銆鍦ㄥ浘4涓紝淇濇寔榛樿璁劇疆錛岀偣鍑籉inish銆?br />
鍥?
銆銆涓轟簡浣跨敤SDL錛屾垜浠渶瑕佽繘琛岀浉鍏崇殑璁劇疆錛岄夋嫨Project->Settings...錛岄夋嫨C/C++灞炴ч〉錛屽湪Category涓夋嫨Code Generation錛屽湪Use run-time library涓夋嫨Debug Multithreaded DLL錛屽鍥?鎵紺恒?br />
鍥?
銆銆鍦–ategory涓夋嫨Preprocessor錛屽湪'Additional include directories'鐨勬枃鏈涓~涓?.\SDL-1.2.8\include\錛屽鍥?鎵紺恒?br />
鍥?
銆銆閫夋嫨Link灞炴ч〉錛屽湪'Object/library modules'鏂囨湰妗嗙殑棣栭儴澧炲姞SDLmain.lib鍜宻dl.lib錛屽鍥?鎵紺恒?br />
鍥?
銆銆浠嶇劧鏄疞ink灞炴ч〉錛岄夋嫨Category涓殑Input錛屽湪'Additional library path'鏂囨湰妗嗕腑濉啓..\SDL-1.2.8\lib\錛屽鍥?鎵紺恒?br />
鍥?
銆銆榪欐牱鎴戜滑灝卞畬鎴愪簡緙栫▼鍓嶇殑璁劇疆宸ヤ綔錛屼笉榪囪繖鏄拡瀵笵ebug鐗堟湰鐨勶紝濡傛灉瑕佽緗甊elease鐗堟湰錛岄渶瑕侀夋嫨Build->Set Active Configuration,閫夋嫨Release錛岀劧鍚庡啀嬈″涓婇厤緗竴嬈°?br />
涓嬮潰鎴戜滑姝e紡寮濮嬬紪紼嬶紝灝咵:\tutorial\SDL-1.2.8\lib\SDL.dll鎷瘋礉鍒癵p鏂囦歡澶逛笅錛岀劧鍚庣粰gp宸ョ▼澧炲姞涓涓狢++鏂囦歡main.cpp銆傚鍥?鎵紺恒?br />
鍥?
銆銆灝嗕互涓嬩唬鐮佹嫹璐濆埌main.cpp騫朵繚瀛樸?br />#include <stdlib.h>
#if defined(_MSC_VER)
#include "SDL.h"
#else
#include "SDL/SDL.h"
#endif
SDL_Surface *screen;
void render()
{
銆// 鐙崰璧勬簮錛屽皢surface 閿佸畾
銆if (SDL_MUSTLOCK(screen))
銆銆if (SDL_LockSurface(screen) < 0)
銆銆銆return;
銆// 鑾峰彇褰撳墠鏃墮棿錛屼互姣璁℃椂
銆int tick = SDL_GetTicks();
銆// 澹版槑鍙橀噺
銆int i, j, yofs, ofs;
銆// 瀵圭獥鍙h繘琛岀粯鍒?br />銆yofs = 0;
銆for (i = 0; i < 480; i++)
銆{
銆銆for (j = 0, ofs = yofs; j < 640; j++, ofs++)
銆銆{
銆銆銆((unsigned int*)screen->pixels)[ofs] = i * i + j * j + tick;
銆銆}
銆銆yofs += screen->pitch / 4;
銆}
銆// 瑙i櫎閿佸畾
銆if (SDL_MUSTLOCK(screen))
銆銆SDL_UnlockSurface(screen);
銆// 浣跨敤SDL瀵圭獥鍙h繘琛屾洿鏂?br />銆SDL_UpdateRect(screen, 0, 0, 640, 480);
}
// Entry point
int main(int argc, char *argv[])
{
銆// 鍒濆鍖朣DL瀛愮郴緇燂紝榪欓噷鍙瑙嗛榪涜鍒濆鍖?br />銆if ( SDL_Init(SDL_INIT_VIDEO) < 0 )
銆{
銆銆fprintf(stderr, "Unable to init SDL: %s\n", SDL_GetError());
銆銆exit(1);
銆}
銆// 娉ㄥ唽SDL_Quit錛屽綋閫鍑烘椂璋冪敤錛屼嬌寰楅鍑烘椂紼嬪簭鑷姩娓呯悊
銆atexit(SDL_Quit);
銆// 浣跨敤32浣嶈薄绱犲垱寤?40x480鐨勭獥鍙?br />銆screen = SDL_SetVideoMode(640, 480, 32, SDL_SWSURFACE);
銆// 鑻ュけ璐ワ紝鍒欓鍑?br />銆if ( screen == NULL )
銆{
銆銆fprintf(stderr, "Unable to set 640x480 video: %s\n", SDL_GetError());
銆銆exit(1);
銆}
銆// 涓誨驚鐜?br />銆while (1)
銆{
銆銆// Render stuff
銆銆render();
銆銆// SDL涓殑浜嬩歡杞鏈哄埗
銆銆SDL_Event event;
銆銆while (SDL_PollEvent(&event))
銆銆{
銆銆銆//瀵規(guī)秷鎭繘琛屽鐞?br />銆銆銆switch (event.type)
銆銆銆{
銆銆銆銆// 濡傛灉鎸変笅鏌愰敭鐨勬秷鎭搷搴?br />銆銆銆銆case SDL_KEYDOWN:
銆銆銆銆銆break;
銆銆銆銆銆//濡傛灉鏌愰敭鎸変笅鍚庡脊璧風殑娑堟伅鍝嶅簲
銆銆銆銆case SDL_KEYUP:
銆銆銆銆銆//鑻ユ寜涓婨SC閿紝鍒欓鍑?br />銆銆銆銆銆if (event.key.keysym.sym == SDLK_ESCAPE)
銆銆銆銆銆銆return 0;
銆銆銆銆銆break;
銆銆銆銆銆//閫鍑烘秷鎭搷搴?br />銆銆銆銆case SDL_QUIT:
銆銆銆銆銆return(0);
銆銆銆}
銆銆}
銆}
銆return 0;
}
銆銆瀵瑰伐紼媑p榪涜緙栬瘧錛屽彲浠ョ湅鐪嬪姩鎬佹按娉㈢汗鐨勬晥鏋滀簡:) 濡傚浘10鎵紺恒?br />
鍥?0
銆銆濡傛灉浣犺兘澶熺湅鍒板浘10涓殑緹庝附鍔ㄦ佺獥鍙o紝閭d箞鎭枩浣狅紝浣犲彲浠ュ紑濮嬫極娓窼DL鐨勭簿褰╀笘鐣屼簡銆備笅闈㈡垜浠皢姝e紡寮濮嬫垜浠殑SDL涔嬫梾銆?br />
]]>
銆銆Simple DirectMedia Layer, 綆縐癝DL錛屾槸涓涓嚜鐢辯殑璺ㄥ鉤鍙扮殑澶氬獟浣撳紑鍙戝寘錛屼富瑕侀氳繃OpenGL鍜?D瑙嗛甯х紦鍐?framebuffer)鎻愪緵瀵歸煶棰戙侀敭鐩樸侀紶鏍囥佹父鎴忔搷綰墊潌(joystick)鍜?D紜歡鐨勫簳灞傝闂傚畠琚箍娉涚殑搴旂敤浜嶮PEG鍥炴斁杞歡銆佹ā鎷熷櫒鍜屽涓憲鍚嶆父鎴忎腑錛屽鑾峰緱澶у鐨勩婃枃鏄庯細鏉冨懼ぉ涓嬨?Civilization: Call To Power)鐨凩inux縐繪鐗堟湰銆傚畠鐨勫畼鏂圭珯鐐規(guī)槸錛歨ttp://www.libsdl.org/ 錛岃繕鏈変竴涓潪甯鎬釜鎬х殑LOGO(鍥?)銆?br />
銆銆鍦╓in32緙栫▼涓紝濡傛灉瑕佹搷綰?D鍥懼儚錛屽彲浠ラ夋嫨浣跨敤GDI鎴栬匘irectDraw錛屽墠鑰呴熷害杈冩參錛岃屽悗鑰呮槸鐗瑰畾閽堝Microsoft騫沖彴鐨勶紝鍦ㄩ潪Win32騫沖彴涓婄Щ妞嶄細甯︽潵寰堝ぇ鐨勯夯鐑︺傝繖鏃訛紝浣犲彲浠ラ夋嫨浣跨敤SDL銆係DL鏀寔澶氱騫沖彴錛歀inux銆乄indows, BeOS, MacOS Classic, MacOS X, FreeBSD, OpenBSD, BSD/OS, Solaris, IRIX鍜孮NX錛屽悓鏃朵篃閮ㄥ垎鏀寔閮ㄥ垎鍏朵粬騫沖彴錛歐indows CE, AmigaOS, Dreamcast, Atari, NetBSD, AIX, OSF/Tru64, RISC OS鍜孲ymbianOS銆傚綋鐒禨DL鏈韓鏄拡瀵?D鍥懼儚緙栫▼鐨勶紝濡傛灉浣跨敤鍒?D緙栫▼錛岄偅涔堥渶瑕佸皢SDL鍜孫penGL緇撳悎浣跨敤銆?br />
銆銆SDL鏄敤C緙栧啓鐨勶紝浣嗘槸涔熸敮鎸丆++錛屽悓鏃跺叾浠栧縐嶈璦錛屼笅闈㈢粰鍑轟簡鍏朵粬璇█鐨凷DL鐨勫紑鍙戝寘鐨勭浉鍏充俊鎭細
銆銆路Ada
銆銆銆AdaSDL - http://sourceforge.net/projects/adasdl/
銆銆路C#
銆銆銆SDL.Net - http://cs-sdl.sourceforge.net/
銆銆路Eiffel
銆銆銆ewg - http://ewg.sourceforge.net/
銆銆路Erlang
銆銆銆ESDL - http://www.ericsson.com/cslab/~dgud/esdl/
銆銆路Euphoria
銆銆銆SDL_Wrap - http://www.rapideuphoria.com/sdl_wrap.zip
銆銆路Guile
銆銆銆guile-sdl - http://sourceforge.net/projects/guile-sdl/
銆銆路Java
銆銆銆JSDL - http://jsdl.sourceforge.net/
銆銆銆sdljava - http://sdljava.sourceforge.net
銆銆路Lisp
銆銆銆CL-SDL - http://cl-sdl.sourceforge.net/
銆銆銆SDL for Corman Common Lisp - http://www.balooga.com/lisp_sdl.php3
銆銆路Lua
銆銆銆luaSDL - http://lua-users.org/wiki/LuaModuleLuaSdl
銆銆路ML
銆銆銆SDLML - http://www.HardcoreProcessing.com/Freeware/SDLML.html
銆銆銆OCamlSDL - http://ocamlsdl.sourceforge.net/
銆銆路Objective C
銆銆銆SDLOBJC - http://savannah.nongnu.org/projects/sdlobjc/
銆銆路Pascal
銆銆銆SDL4Freepascal - http://sdl4fp.sourceforge.net/
銆銆銆JEDI-SDL - http://www.delphi-jedi.org/Jedi:TEAM_SDL_HOME
銆銆路Perl
銆銆銆SDLPerl - http://sdl.perl.org
銆銆路PHP
銆銆銆PHP SDL module - http://phpsdl.sourceforge.net
銆銆路Pike
銆銆銆Natively supported (module SDL) - http://pike.ida.liu.se/
銆銆路Pliant
銆銆銆Pligame - http://pligame.sourceforge.net/
銆銆路Python
銆銆銆PyGame - http://pygame.seul.org/
銆銆路Ruby
銆銆銆Ruby/SDL - http://www.kmc.kyoto-u.ac.jp/~ohai/index.en.html
銆銆銆RUDL - http://rudl.sourceforge.net
]]>
銆銆瑙嗛
銆銆路璁劇疆8bpp鎴栨洿楂樼殑浠繪剰鑹插僵娣卞害鐨勮棰戞ā寮忋傚鏋滄煇涓ā寮忕‖浠朵笉鏀寔錛屽彲浠ラ夋嫨杞寲涓哄彟涓妯″紡銆?
銆銆路鐩存帴鍐欏叆綰挎х殑鍥懼儚甯х紦鍐詫紙framebuffer錛夈?
銆銆路鐢ㄩ鑹查敭鍊鹼紙colorkey錛夋垨鑰卆lpha娣峰悎灞炴у垱寤虹敤浜庣粯鍥劇殑琛ㄩ潰(surface)銆?
銆銆路Surface鐨刡lit鑳借嚜鍔ㄧ殑杞寲涓虹洰鏍囨牸寮忋俠lit鏄紭鍖栬繃鐨勶紝騫惰兘浣跨敤紜歡鍔犻熴倄86騫沖彴涓婃湁閽堝MMX浼樺寲榪囩殑blit銆?
銆銆路紜歡鍔犻熺殑blit鍜宖ill錛堝~鍏咃級鎿嶄綔錛屽鏋滅‖浠舵敮鎸佺殑璇濄?
銆銆浜嬩歡
銆銆路鎻愪緵浠ヤ笅浜嬩歡錛?
銆銆o 搴旂敤紼嬪簭鐨剉isibility(鍙鎬?鍙戠敓鏀瑰彉
銆銆o 閿洏杈撳叆
銆銆o 榧犳爣杈撳叆
銆銆o 鐢ㄦ埛瑕佹眰鐨勯鍑?
銆銆路姣忕浜嬩歡閮借兘閫氳繃SDL_EventState()鍏抽棴鎴栬呮墦寮銆?
銆銆路浜嬩歡緇忕敱鐢ㄦ埛鎸囧畾鐨勮繃婊ゅ嚱鏁板啀琚姞鍏ュ埌鍐呴儴鐨勪簨浠墮槦鍒椼?
銆銆路綰跨▼瀹夊叏鐨勪簨浠墮槦鍒椼?br />
銆銆闊抽
銆銆路璁劇疆8浣嶅拰16浣嶇殑闊抽錛屽崟澹伴亾鎴栬呯珛浣撳0錛屽鏋滄牸寮忕‖浠朵笉鏀寔錛屽彲浠ラ夋嫨杞崲銆?
銆銆路鐢辯嫭绔嬬殑綰跨▼鎵ц闊抽閮ㄥ垎錛屽茍鎻愪緵鐢ㄦ埛鍥炶皟錛坈allback錛夋満鍒躲?
銆銆路璁捐涓婅冭檻鍒頒簡瀹㈡埛瀹氬埗鐨勮蔣娣烽煶鍣紝浣嗗疄闄呬笂鍦ㄤ緥紼嬩腑灝卞寘鍚簡涓涓畬鏁寸殑闊抽/闊充箰杈撳嚭搴撱?br />
銆銆CD闊抽
銆銆路瀹屾暣鐨凜D闊抽鎺у埗API
銆銆綰跨▼
銆銆路綆鍗曠殑綰跨▼鍒涘緩API
銆銆路鐢ㄤ簬鍚屾鐨勭畝鍗曠殑浜岃繘鍒朵俊鍙烽噺錛坰emaphores錛?
銆銆瀹氭椂鍣?
銆銆路璇誨彇宸叉祦閫濈殑姣鏁般?
銆銆路絳夊緟鎸囧畾鐨勬縐掓暟銆?
銆銆路璁劇疆涓涓?0姣綺懼害鐨勫懆鏈熸у畾鏃跺櫒銆?br />
銆銆瀛楄妭搴忔棤鍏?
銆銆路渚︽祴褰撳墠緋葷粺鐨勫瓧鑺傚簭
銆銆路蹇熻漿鎹㈡暟鎹殑鍑芥暟
銆銆路璇誨啓鎸囧畾瀛楄妭搴忕殑鏁版嵁
銆銆涓嬭澆
銆銆SDL鐨勫畼鏂逛笅杞藉湴鍧涓篽ttp://www.libsdl.org/download-1.2.php, 鏈鏂扮増鏈負1.2.8錛屽垎涓鴻繍琛屽簱Runtime Library鍜屽紑鍙戝簱Development Library錛屼嬌鐢⊿DL寮鍙戦渶瑕佷笅杞界殑鏄悗鑰呫傜敱浜嶴DL鏀寔澶氬鉤鍙板拰澶氫釜寮鍙戝伐鍏峰VC6銆乂isual Studio.NET 2003銆丏ev-C++絳夌瓑錛屾墍浠ュ彲浠ユ牴鎹渶瑕侀夋嫨鍚堥傝嚜宸辯殑騫沖彴鐗堟湰銆傜敱浜庣瑪鑰呴噰鐢╒C6緇欐湅鍙嬩滑璁茶ВSDL鐨勪嬌鐢紝鍥犳鏂囩珷涓彧浠嬬粛浜哣C6涓嬬殑瀹夎鏂瑰紡錛屽茍浣跨敤浜嗕竴涓皬渚嬪瓙鍋氳鏄庛傚鏋滄?zhèn)ㄤ娇鐢ㄥ叾浠栫殑邈^鍙板拰宸ュ叿錛岃鍦ㄥ畼鏂圭綉绔欎笂鏌ユ壘鐩稿簲鐨勮鏄庡茍鎸夌収瑕佹眰鍘誨畨瑁呬嬌鐢ㄣ?
]]>
鐢ㄤ簬娓告垙銆佹父鎴忓紑鍙戝伐鍏楓佹ā鎷熷櫒銆佹牱鏈紨紺恒佸濯掍綋搴旂敤絳?
瀹冭兘鍋氫粈涔堬紵
瑙嗛銆侀煶棰戙佷簨浠躲丆DROM鏀寔銆佺嚎紼嬨佽鏃跺櫒銆佸悇縐嶅浘璞℃枃浠舵牸寮忚鍙栥佸揩閫熺粯鍥俱佹販闊熾佹父鎴忔潌鏀?/p>
SDL_Audio銆丼DL_Mixer 鈥斺?DirectSound
SDL_Joystick銆丼DL_Base 鈥斺?DirectInput
SDL_Net 鈥斺?DirectPlay
SMPEG銆丼DL_Video銆丼DL_Audio銆丼DL_Sound銆丼DL_Filter 鈥斺?DirectShow
瀛椾綋銆佺獥鍙g鐞嗙瓑鍏朵粬瀹炵敤宸ュ叿鍜屽ぇ閲忔牱渚?
鏀寔鍝簺騫沖彴錛?br />Linux 闅忕郴緇熷畨瑁?
Win32 闇涓涓埌鍑犱釜杈冨皬鐨凞LL
BeOS
MacOS, MacOS X
鍏朵粬闈炲畼鏂圭Щ妞?
鍙互鍦ㄥ摢浜涚紪紼嬭璦涓嬌鐢紵
鍑犱箮鎵鏈夛紒SDL鏈韓鐢?C 鍐欐垚錛屾湁鍚勭璇█鐨勬帴鍙c傜畝鍗曠殑鍑芥暟璋冪敤錛屼笉闇瑕丆OM銆?/p>
鎬葷殑鏉ヨ錛孲DL騫朵笉鎬庝箞浼樼錛屼絾瀹冩槸灝戞暟鐨凞X鏇夸唬鍝佷箣涓銆傛湁浜轟細闂負浠涔堥潪寰椾笉鐢―X錛屼篃娌℃湁闈炲緱
http://www.libsdl.org/ SDL棣栭〉
鏈変釜鍒楄〃錛屾諱箣闈炲父澶?
]]>