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

隨筆 - 96  文章 - 255  trackbacks - 0
<2013年3月>
242526272812
3456789
10111213141516
17181920212223
24252627282930
31123456

E-mail:zbln426@163.com QQ:85132383 長(zhǎng)期尋找對(duì)戰(zhàn)略游戲感興趣的合作伙伴。

常用鏈接

留言簿(21)

隨筆分類

隨筆檔案

SDL相關(guān)網(wǎng)站

我的個(gè)人網(wǎng)頁

我的小游戲

資源下載

搜索

  •  

積分與排名

  • 積分 - 495367
  • 排名 - 39

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

作者:龍飛

1.1:SDL_Init!

        我們回顧一下前面的那個(gè)小程序,所使用到的第一個(gè)SDL函數(shù)是:SDL_Init(SDL_INIT_EVERYTHING);
        這是SDL的裝載函數(shù),也就是說,SDL的其他函數(shù)必須在這個(gè)函數(shù)將SDL裝載之后才能夠正常調(diào)用。我們看一下函數(shù)原形:
int SDL_Init(Uint32 flags);

        它的返回值是int,這個(gè)我們很熟悉。如果SDL成功初始化裝載,函數(shù)返回0,如果異常,則返回-1。接下來,這個(gè)函數(shù)的形參列表不屬于標(biāo)準(zhǔn)C++的內(nèi)容。

1.1.1:Uint32 是什么?

        根據(jù)Uint32在函數(shù)原形中的位置,我們可以猜想到它是一種類類型的名字。因?yàn)镾DL是跨平臺(tái)的,而且還支持多種計(jì)算機(jī)語言,當(dāng)我們?cè)赪indows的VC編譯器里面簡(jiǎn)單的通過sizeof(int)可以看到int類型占用4個(gè)字節(jié)(32位)的時(shí)候,我們并不清楚其他平臺(tái),其他編譯器和其他語言里面對(duì)int的大小是如何定義的。所以,為了讓大家在任何情況下都能比較直觀的閱讀類類型的大小,SDL使用了一個(gè)簡(jiǎn)單的約定:U就是unsigned(無符號(hào),意味著非負(fù))的意思,與之對(duì)應(yīng)的S代表signed(有符號(hào),可正可負(fù));int還是整數(shù)的意思;32表示占32位,類似的,還可以占1至4個(gè)字節(jié),即8,16,32,64位。Uint32的意思就是無符號(hào)的,占32位的整數(shù)類。

1.1.2:flag 是什么意思?

        flag就是旗幟……別k我……多想想,旗幟可用于什么呢?旗幟可用于發(fā)信號(hào)和標(biāo)記。在計(jì)算機(jī)里,通常把flag叫做位標(biāo)——其實(shí),bit flag才是位標(biāo),不過這種用法貌似已經(jīng)是一種習(xí)慣。所以,從flags字面,我們至少可以理解到三層含義-_-!!!
1) 關(guān)鍵字“位”,這意味著我們需要用二進(jìn)制的觀點(diǎn)看這個(gè)值,并且,這個(gè)值可以參與位運(yùn)算;
2) 關(guān)鍵字“標(biāo)”,這顯然是標(biāo)記的意思。小狗通常采用一些不文明的手段表明某個(gè)區(qū)域是自己的勢(shì)力范圍,而人類則通常采用插一面代表自己勢(shì)力的旗幟,所以這就是flag的本意。
3) 關(guān)鍵字"s",這里使用了復(fù)數(shù),表明我們可以不止插一面旗。
        我們看看這個(gè)函數(shù)的位標(biāo)的定義:(就在SDL.h文件中)

#define    SDL_INIT_TIMER        0x00000001
#define SDL_INIT_AUDIO        0x00000010
#define SDL_INIT_VIDEO        0x00000020
#define SDL_INIT_CDROM        0x00000100
#define SDL_INIT_JOYSTICK    0x00000200
#define SDL_INIT_EVERYTHING    0x0000FFFF
        我們通過最常可能用到的audio和video來簡(jiǎn)單說明下。SDL_INIT_AUDIO和SDL_INIT_VIDEO顯然實(shí)際上只用到了2個(gè)字節(jié),為了少寫8*6個(gè)無謂的0,我們就簡(jiǎn)單的看成是0x10和0x20,寫成2進(jìn)制,則
SDL_INIT_AUDIO = 0001 0000
SDL_INIT_VIDEO = 0010 0000
位運(yùn)算或(|)的結(jié)果是若兩數(shù)相對(duì)應(yīng)的位,有一個(gè)是1則得1。(與(&)則是兩數(shù)相對(duì)應(yīng)的位全是1才得1。)
所以,SDL_INIT_AUDIO | SDL_INIT_VIDEO的結(jié)果是 0011 0000,即0x30(這里要是一不小心覺得貌似1+2=3,第一,理解錯(cuò)了;第二,是個(gè)巧合)。

1.2:SDL_WasInit?

        當(dāng)我們坐上公共汽車,我們真正關(guān)心的問題,是這車是開還是停。同樣,當(dāng)SDL已經(jīng)裝載,我們更關(guān)心的問題是它的運(yùn)行狀態(tài),并且,有哪些“旗子”插在了上面?所以,我們可以問問SDL:xx_flag was init?
int SDL_WasInit(Uint32 flags);
        這里,我們可以將SDL_INIT_*的5個(gè)具體旗子看成一種用法;使用了“|”的復(fù)合旗子以及那個(gè)EVERYTHING的概念看成另外一種用法。當(dāng)flag為某個(gè)具體旗子的時(shí)候,如果該旗子插上了,則返回該旗子的位標(biāo)值本身,否則就返回0。當(dāng)參數(shù)不止一面旗子的時(shí)候,則返回這些旗子中插上了的那部分的“|”值。(其實(shí)就是返回那些在你指定的旗子中插上的那些,只是電腦看起來很直觀,人看起來很不直觀——特別在使用非2進(jìn)制表示的時(shí)候)。
        官方文檔里面舉了3個(gè)例子,后面我將舉一個(gè)我個(gè)人覺得比較直觀的程序例子。
/* Get init data on all the subsystems */
Uint32 subsystem_init;

subsystem_init
=SDL_WasInit(SDL_INIT_EVERYTHING);

if(subsystem_init&SDL_INIT_VIDEO)
  printf(
"Video is initialized.\n");
else
  printf(
"Video is not initialized.\n");

/* Just check for one specific subsystem */

if(SDL_WasInit(SDL_INIT_VIDEO)!=0)
  printf(
"Video is initialized.\n");
else
  printf(
"Video is not initialized.\n");

/* Check for two subsystems */

Uint32 subsystem_mask
=SDL_INIT_VIDEO|SDL_INIT_AUDIO;

if(SDL_WasInit(subsystem_mask)==subsystem_mask)
  printf(
"Video and Audio initialized.\n");
else
  printf(
"Video and Audio not initialized.\n");


1.3:一段用于演示flags的程序。

        需要補(bǔ)充說明的一點(diǎn)是:當(dāng)SDL_Init(SDL_INIT_EVERYTHING);的時(shí)候,SDL_WasInit(SDL_INIT_EVERYTHING)返回的并非SDL_INIT_EVERYTHING的原值0xFFFF,而是5個(gè)基本旗子的“|”和,即0x0331,所以,程序里面我定義了一個(gè)const Uint32 EVERYTHING = 0x331;,來正確的反應(yīng)EVERYTHING的實(shí)際情況。

/////////////////////////////
//本程序用于演示SDL_Init()函數(shù)的flags
//有關(guān)SDL的信息請(qǐng)?jiān)L問SDL的官方網(wǎng)站
//http://www.libsdl.org/
//任何疑問和建議請(qǐng)聯(lián)系我 zbln426@163.com
//再別流年的技術(shù)實(shí)驗(yàn)室
//http://m.shnenglu.com/lf426/
/////////////////////////////

/////////////////////////////
//<iomanip>包含了
//setw(n) 用于設(shè)置下次輸出的字寬
//setfill(ch) 用于將字寬多出部分用char ch填充
/////////////////////////////
#include <iostream>
#include 
<iomanip>
#include 
"SDL/SDL.h"
using namespace std;

inline 
void showHex(int SDLflags);
void testSDLflags(Uint32 SDLflags, char* inf);

int main(int argc, char* argv[])
{
    cout 
<< "*****flags*****" << endl;
    cout 
<< "SDL_INIT_EVERYTHING = ";
    showHex(SDL_INIT_EVERYTHING);
    cout 
<< "SDL_INIT_VIDEO = ";
    showHex(SDL_INIT_VIDEO);
    cout 
<< "SDL_INIT_AUDIO = ";
    showHex(SDL_INIT_AUDIO);
    cout 
<< "SDL_INIT_TIMER = ";
    showHex(SDL_INIT_TIMER);
    cout 
<< "SDL_INIT_CDROM = ";
    showHex(SDL_INIT_CDROM);
    cout 
<< "SDL_INIT_JOYSTICK = ";
    showHex(SDL_INIT_JOYSTICK);
    cout 
<< endl << endl;
    
    testSDLflags(SDL_INIT_EVERYTHING, 
"SDL_INIT_EVERYTHING");
    testSDLflags(SDL_INIT_VIDEO, 
"SDL_INIT_VIDEO");
    testSDLflags(SDL_INIT_AUDIO, 
"SDL_INIT_AUDIO");
    testSDLflags(SDL_INIT_VIDEO 
| SDL_INIT_AUDIO, "SDL_INIT_VIDEO | SDL_INIT_AUDIO");
    testSDLflags(SDL_INIT_VIDEO 
| SDL_INIT_AUDIO | SDL_INIT_TIMER | SDL_INIT_CDROM | SDL_INIT_JOYSTICK,
                
"SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_TIMER | SDL_INIT_CDROM | SDL_INIT_JOYSTICK");
    
return 0;
}

////////////////////////
//該函數(shù)用于測(cè)試不同的flags所產(chǎn)生的效果
///////////////////////
void testSDLflags(Uint32 SDLflags, char* inf)
{
    Uint32 subsystem_init 
= SDLflags;
    
const Uint32 EVERYTHING = 0x331;
    SDL_Init(subsystem_init);
    cout 
<< "SDL_Init(" << inf << ") Loading" <<endl;
    
    cout 
<< "*****runtime*****" << endl;
    cout 
<< "SDL_WasInit(SDL_INIT_EVERYTHING) = ";
    showHex(SDL_WasInit(SDL_INIT_EVERYTHING));
    cout 
<< "SDL_WasInit(SDL_INIT_VIDEO) = ";
    showHex(SDL_WasInit(SDL_INIT_VIDEO));
    cout 
<< "SDL_WasInit(SDL_INIT_AUDIO | SDL_INIT_VIDEO) = ";
    showHex(SDL_WasInit(SDL_INIT_AUDIO 
| SDL_INIT_VIDEO));

    cout 
<< "*****runtime in bool*****" << endl;
    cout 
<< boolalpha;
    Uint32 runtimeThing 
= SDL_WasInit(SDL_INIT_EVERYTHING);
    cout 
<< "SDL_INIT_EVERYRHING? " << (runtimeThing == EVERYTHING) << endl;
    cout 
<< "SDL_INIT_VIDEO? " << bool(runtimeThing & SDL_INIT_VIDEO) << endl;
    cout 
<< "SDL_INIT_AUDIO? " << bool(runtimeThing & SDL_INIT_AUDIO) << endl;
    cout 
<< noboolalpha;
    cout 
<< "SDL_Quit\n\n\n";

    SDL_Quit();
    
    
return;
}

/////////////////////////////
//該函數(shù)用于將flags打印為16進(jìn)的格式
/////////////////////////////
void showHex(int SDLflags)
{
    cout 
<< hex;
    cout 
<< "0x" << setw(8<< setfill('0'<< SDLflags << endl;
    cout 
<< dec;
}

運(yùn)行結(jié)果如下:
*****flags*****
SDL_INIT_EVERYTHING 
= 0x0000ffff
SDL_INIT_VIDEO 
= 0x00000020
SDL_INIT_AUDIO 
= 0x00000010
SDL_INIT_TIMER 
= 0x00000001
SDL_INIT_CDROM 
= 0x00000100
SDL_INIT_JOYSTICK 
= 0x00000200


SDL_Init(SDL_INIT_EVERYTHING) Loading
*****runtime*****
SDL_WasInit(SDL_INIT_EVERYTHING) 
= 0x00000331
SDL_WasInit(SDL_INIT_VIDEO) 
= 0x00000020
SDL_WasInit(SDL_INIT_AUDIO | SDL_INIT_VIDEO) 
= 0x00000030
*****runtime in bool*****
SDL_INIT_EVERYRHING? true
SDL_INIT_VIDEO? true
SDL_INIT_AUDIO? true
SDL_Quit


SDL_Init(SDL_INIT_VIDEO) Loading
*****runtime*****
SDL_WasInit(SDL_INIT_EVERYTHING) 
= 0x00000020
SDL_WasInit(SDL_INIT_VIDEO) 
= 0x00000020
SDL_WasInit(SDL_INIT_AUDIO | SDL_INIT_VIDEO) 
= 0x00000020
*****runtime in bool*****
SDL_INIT_EVERYRHING? false
SDL_INIT_VIDEO? true
SDL_INIT_AUDIO? false
SDL_Quit


SDL_Init(SDL_INIT_AUDIO) Loading
*****runtime*****
SDL_WasInit(SDL_INIT_EVERYTHING) 
= 0x00000010
SDL_WasInit(SDL_INIT_VIDEO) 
= 0x00000000
SDL_WasInit(SDL_INIT_AUDIO | SDL_INIT_VIDEO) 
= 0x00000010
*****runtime in bool*****
SDL_INIT_EVERYRHING? false
SDL_INIT_VIDEO? false
SDL_INIT_AUDIO? true
SDL_Quit


SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO) Loading
*****runtime*****
SDL_WasInit(SDL_INIT_EVERYTHING) 
= 0x00000030
SDL_WasInit(SDL_INIT_VIDEO) 
= 0x00000020
SDL_WasInit(SDL_INIT_AUDIO | SDL_INIT_VIDEO) 
= 0x00000030
*****runtime in bool*****
SDL_INIT_EVERYRHING? false
SDL_INIT_VIDEO? true
SDL_INIT_AUDIO? true
SDL_Quit


SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_TIMER | SDL_INIT_CDROM | SDL
_INIT_JOYSTICK) Loading
*****runtime*****
SDL_WasInit(SDL_INIT_EVERYTHING) 
= 0x00000331
SDL_WasInit(SDL_INIT_VIDEO) 
= 0x00000020
SDL_WasInit(SDL_INIT_AUDIO | SDL_INIT_VIDEO) 
= 0x00000030
*****runtime in bool*****
SDL_INIT_EVERYRHING? true
SDL_INIT_VIDEO? true
SDL_INIT_AUDIO? true
SDL_Quit

1.4:一段用于演示flags二進(jìn)制的演示程序

#include <iostream>
#include 
<bitset>
#include 
"SDL/SDL.h"
using namespace std;

int main(int argc, char* argv[])
{
    cout 
<< "SDL_INIT_EVERYTHING = " << bitset<32>(SDL_INIT_EVERYTHING) << endl;
    cout 
<< "SDL_INIT_VIDEO = " << bitset<32>(SDL_INIT_VIDEO) << endl;
    cout 
<< "SDL_INIT_AUDIO = " << bitset<32>(SDL_INIT_AUDIO) << endl;
    cout 
<< "SDL_INIT_VIDEO | SDL_INIT_AUDIO = " << bitset<32>(SDL_INIT_VIDEO | SDL_INIT_AUDIO) << endl;
    
return 0;
}
運(yùn)行結(jié)果如下:
SDL_INIT_EVERYTHING = 00000000000000001111111111111111
SDL_INIT_VIDEO 
= 00000000000000000000000000100000
SDL_INIT_AUDIO 
= 00000000000000000000000000010000
SDL_INIT_VIDEO | SDL_INIT_AUDIO 
= 00000000000000000000000000110000
posted on 2008-02-01 22:40 lf426 閱讀(8206) 評(píng)論(3)  編輯 收藏 引用 所屬分類: SDL入門教程

FeedBack:
# re: SDL入門教程(二):1、SDL的裝載,位標(biāo)(flags) 2010-04-01 07:14 dsw
hex 都沒聲明....什么東西?  回復(fù)  更多評(píng)論
  
# re: SDL入門教程(二):1、SDL的裝載,位標(biāo)(flags) 2012-03-25 23:12 y
@dsw
hex是std里面的東西。  回復(fù)  更多評(píng)論
  
# re: SDL入門教程(二):1、SDL的裝載,位標(biāo)(flags) 2012-05-10 15:21 原罪流觴
你好,請(qǐng)問我運(yùn)行之后,并沒有在窗口中出現(xiàn)結(jié)果,而是在debug文件夾里自動(dòng)生成了一個(gè)stdcout的txt文檔……這個(gè)是sdl的正?,F(xiàn)象嗎?  回復(fù)  更多評(píng)論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
              欧美国产日韩视频| 亚洲欧美国产高清| 亚洲人成在线播放网站岛国| 久久亚洲图片| 亚洲视频一区二区| 日韩亚洲视频在线| 久久精品国产一区二区三区免费看| 亚洲精品一区二区三区蜜桃久| 国产精品嫩草影院av蜜臀| 欧美日韩大陆在线| 欧美国产第一页| 欧美91大片| 欧美精品激情blacked18| 欧美成人中文字幕| 亚洲婷婷综合色高清在线| 男同欧美伦乱| 欧美国产成人精品| 欧美久久一级| 亚洲欧美在线高清| 亚洲在线观看| 亚洲在线一区| 亚洲免费一区二区| 久久成人免费网| 久久艳片www.17c.com| 久久综合网hezyo| 欧美精品在线网站| 欧美网站在线观看| 国产精品亚洲精品| 狠狠色伊人亚洲综合成人| 在线观看福利一区| 99这里有精品| 久久成人精品| 欧美激情四色| 一本色道久久综合亚洲精品婷婷 | 99re在线精品| 夜色激情一区二区| 欧美亚洲视频| 欧美激情亚洲综合一区| 亚洲主播在线观看| 欧美精品激情blacked18| 国产一区二区三区久久久久久久久| 亚洲福利视频二区| 欧美亚洲免费电影| 亚洲人成在线观看| 欧美一区1区三区3区公司| 欧美另类高清视频在线| 亚洲成人自拍视频| 久久精品国产亚洲精品| 99国产精品久久久久老师| 久久久久久噜噜噜久久久精品| 欧美亚洲第一区| 99天天综合性| 最新亚洲激情| 欧美激情久久久久久| 激情亚洲网站| 久久精品免费电影| 午夜精品区一区二区三| 国产精品男女猛烈高潮激情 | 亚洲精品乱码久久久久久黑人| 久久久精品一区二区三区| 中文在线一区| 欧美午夜久久| 夜夜夜久久久| 亚洲黄色在线视频| 欧美国产在线观看| 日韩一二三在线视频播| 亚洲激情啪啪| 欧美理论大片| 亚洲人成高清| 亚洲欧美影音先锋| 国产乱子伦一区二区三区国色天香 | 亚洲高清视频在线观看| 久久久另类综合| 久久av资源网站| 在线观看日韩www视频免费| 欧美 日韩 国产一区二区在线视频 | 一本一本a久久| 欧美日韩在线三区| 亚洲专区一区二区三区| 亚洲尤物在线| 国内精品久久久久影院 日本资源 国内精品久久久久伊人av | 亚洲国产激情| 亚洲人成人一区二区三区| 欧美性久久久| 久久久久久有精品国产| 美女国内精品自产拍在线播放| 亚洲欧洲三级电影| 99视频在线精品国自产拍免费观看 | 亚洲深夜av| 亚洲已满18点击进入久久| 国产精品美腿一区在线看| 久久国产精品免费一区| 老司机午夜精品视频| 在线亚洲高清视频| 欧美在线一二三四区| 亚洲精品男同| 亚洲午夜成aⅴ人片| 国产专区一区| 日韩视频免费在线观看| 国产欧美一区二区精品婷婷| 久久午夜精品一区二区| 欧美巨乳在线| 久久一区二区三区四区五区| 欧美日韩国产综合视频在线观看中文 | 亚洲一区二区av电影| 久久精品噜噜噜成人av农村| 亚洲视频成人| 久久综合久久久| 亚洲欧美韩国| 欧美精品首页| 嫩草伊人久久精品少妇av杨幂| 欧美中文在线字幕| 亚洲主播在线播放| 亚洲免费观看| 欧美在线视频导航| 亚洲综合色噜噜狠狠| 欧美aa国产视频| 狂野欧美激情性xxxx| 国产精品视频xxxx| 亚洲精品在线免费| 亚洲精品免费在线播放| 久久乐国产精品| 久久久久久久久岛国免费| 欧美午夜电影一区| 亚洲精品少妇30p| 亚洲国产清纯| 久久蜜桃香蕉精品一区二区三区| 欧美一级免费视频| 国产精品美女主播| 亚洲小说春色综合另类电影| av72成人在线| 欧美日韩美女在线| 亚洲国产mv| 亚洲欧洲在线一区| 欧美sm视频| 亚洲激情视频网站| 日韩视频中文字幕| 欧美华人在线视频| 亚洲国产综合视频在线观看| 亚洲欧洲另类国产综合| 免费在线亚洲| 亚洲国产精品久久精品怡红院 | 欧美大片专区| 亚洲国产欧美国产综合一区| 亚洲精品视频免费在线观看| 欧美成年人视频网站| 亚洲精品网站在线播放gif| 99视频精品在线| 欧美亚州一区二区三区| 午夜精品久久久久久久久久久久 | 夜夜躁日日躁狠狠久久88av| 亚洲免费综合| 国产偷自视频区视频一区二区| 午夜亚洲激情| 老色鬼精品视频在线观看播放| 亚洲激情国产精品| 欧美日本中文字幕| 亚洲一区二区三区视频| 久久久久久亚洲综合影院红桃 | 亚洲高清一二三区| 亚洲午夜在线| 国产午夜亚洲精品不卡| 久久免费国产精品| 亚洲啪啪91| 午夜激情一区| 亚洲高清免费在线| 欧美福利影院| 亚洲欧美电影在线观看| 你懂的网址国产 欧美| 亚洲毛片播放| aa亚洲婷婷| 国产日韩欧美在线| 亚洲欧美日韩精品久久久| 久久精品国产精品亚洲| 亚洲精品视频在线观看免费| 国产精品久久久久影院亚瑟 | 欧美在线网站| 亚洲国产欧美不卡在线观看| 欧美日韩亚洲国产精品| 欧美一区日韩一区| 99国产麻豆精品| 嫩草国产精品入口| 性久久久久久久久| 日韩午夜av电影| 欧美一区二区性| 国产精品国产三级国产普通话蜜臀 | 久久久xxx| 亚洲视频国产视频| 在线看日韩av| 国产精品一区久久久| 欧美成人国产va精品日本一级| 亚洲图片在区色| 亚洲国产精品女人久久久| 久久精彩视频| 亚洲一区二区三区欧美| 亚洲欧洲久久| 伊人春色精品| 国产专区综合网| 国产日韩欧美日韩| 国产精品porn|