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

隨筆 - 96  文章 - 255  trackbacks - 0
<2008年4月>
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910

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

常用鏈接

留言簿(21)

隨筆分類

隨筆檔案

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

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

我的小游戲

資源下載

搜索

  •  

積分與排名

  • 積分 - 494658
  • 排名 - 39

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

作者:龍飛

1.1:為了按鈕做準(zhǔn)備

        按鈕是鼠標(biāo)事件響應(yīng)的象征,在PC游戲中起著十分重要的作用。這一章節(jié),我們開始通過SDL提供的底層函數(shù),自己來設(shè)計(jì)按鈕。
        按鈕一般有這么幾種狀態(tài):
out: 鼠標(biāo)不在按鈕上;
over: 鼠標(biāo)在按鈕上;
down: 鼠標(biāo)按下了;
up: 鼠標(biāo)松開了;
        其中,down和up又可以細(xì)分為鼠標(biāo)是在按鈕上按下松開的,還是在按鈕外按下松開的。
        我們先從按鈕的表現(xiàn)形式——圖片來分析這些問題。
        為了表現(xiàn)不同的狀態(tài),我們需要多張圖片。至少的,out與over和down中的至少一張圖片應(yīng)該是不一樣的,這樣才能給人以“按下了”的視覺效果。也就是說,如果我們構(gòu)建按鈕類,這個(gè)類將會(huì)包含我們之前設(shè)計(jì)的SurfaceClass類。這樣,根據(jù)我們之前討論的一些C++細(xì)節(jié)問題,我們必須重新小心的設(shè)計(jì)SurfaceClass類。

1.2:為SurfaceClass設(shè)計(jì)基類

        我們之前使用DisplaySurface本身作為TextSurface的基類,這是因?yàn)槲覀兿Mㄟ^基類本身引用派生類,從而不需要為基類和派生類分別寫函數(shù)。同樣的,我們希望在ButtonClass中直接使用基類作為成員數(shù)據(jù),這樣,ButtonClass可以不需要為派生類重新構(gòu)建。在之前的DisplaySurface中,我們可以看到,大部分方法,比如最為重要的blit()方法,所涉及到的成員數(shù)據(jù)僅僅就是SDL_Surface* pSurface,這一點(diǎn),TextSurface類也是一樣的。DisplaySurface類通過圖片創(chuàng)建pSurface,TextSurface類通過字庫創(chuàng)建pSurface,他們的創(chuàng)建條件不盡相同,TextSurface需要打開TTF_Init(),還需要打開字庫TTF_OpenFont(),所以,他們的構(gòu)造函數(shù)與析構(gòu)函數(shù)是不一樣的。一種更加清晰的關(guān)系,是建立起他們的基類,然后把他們的區(qū)別點(diǎn)分開處理,而不是之前采用的if來判斷處理。
        最清晰的辦法,是把BaseSurface設(shè)計(jì)成為抽象基類(ABC),但是ABC的問題在于,無法創(chuàng)建ABC本身的對(duì)象,也就是說,我們需要在ButtonClass中包含的BaseSurface對(duì)象無法建立,所以,我們不能把BaseSurface設(shè)計(jì)成為ABC。我想到的辦法,是將BaseSurface的默認(rèn)構(gòu)造函數(shù)僅僅提供給派生類使用,也就是說,因?yàn)锽aseClass的默認(rèn)構(gòu)造函數(shù)本身是不能建立起必要的數(shù)據(jù)的,比如pSurface和pScreen,我們暫時(shí)都用空指針代替。這里的思想其實(shí)還是ABC的,讓基類僅僅提供算法,即使算法所需要的元素還尚不存在。但是,只要這些元素存在了,BaseSurface也就可以完成這些算法,所以,我們把BaseSurface的復(fù)制構(gòu)造函數(shù)設(shè)計(jì)為公共的,這很重要,這樣才為我們通過派生類去初始化基類的構(gòu)造函數(shù)初始化列表提供了可能。
        我們把基類命名為BaseSurface,之前的DisplaySurface我們用更形象的名稱代替,叫PictureSurface,然后TextSurface不改名。

1.3:如何深度復(fù)制SDL_Surface ?

        因?yàn)镻ictureSurface和TextSurface的構(gòu)造函數(shù)都涉及到了堆操作,也就是說,SDL_Surface是建立在堆上的。我們需要通過基類的復(fù)制構(gòu)造函數(shù)復(fù)制SDL_Surface,必須找到合適的工具。具體來說,新對(duì)象的pSurface必須指像一個(gè)新建立起來的SDL_Surface對(duì)象,而非被復(fù)制的對(duì)象本身。
        我最先想到的是用new...delete組合,但是失敗了。為什么呢?我們研究SDL_Surafce結(jié)構(gòu)本身,發(fā)現(xiàn)在之中包含著一些其它的指針。比如SDL_PixelFormat *format和void *pixels。也就是說,SDL_Surface本身的構(gòu)建也有堆操作,而且,因?yàn)镾DL_Surafce是C風(fēng)格的結(jié)構(gòu)而不是類,它不能提供深度復(fù)制的操作,所以,即使我們用new為SDL_Surface申請了新空間,SDL_Surface本身也不會(huì)為format和pixels申請新的副本。當(dāng)被釋放掉原本的時(shí)候,副本將尋找不到原本的format和pixels,從而產(chǎn)生錯(cuò)誤。
        我們另外能找到的可以深度復(fù)制SDL_Surface的函數(shù),是:
SDL_Surface *SDL_DisplayFormat(SDL_Surface *surface);
SDL_Surface *SDL_ConvertSurface(SDL_Surface *src, SDL_PixelFormat *fmt, Uint32 flags);
        這兩個(gè)函數(shù)貌似都是可行的。實(shí)際上,基本上也都是可行的。但是涉及到文字的時(shí)候,SDL_DisplayFormat將不能正確的轉(zhuǎn)換Blended和Shaded的文字,所以,最后只能使用SDL_ConvertSurafce()。
 新構(gòu)建的SurfaceClass源代碼見:
http://m.shnenglu.com/lf426/archive/2008/04/14/47038.html
posted on 2008-04-17 12:37 lf426 閱讀(2280) 評(píng)論(0)  編輯 收藏 引用 所屬分類: SDL入門教程
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            久久免费国产精品1| 久久中文在线| 国产视频一区免费看| 国产乱肥老妇国产一区二| 国产精品午夜在线观看| 好男人免费精品视频| 在线免费观看一区二区三区| 亚洲欧洲在线一区| 亚洲欧美日韩网| 免费看av成人| 亚洲精选在线观看| 欧美一二三区在线观看| 蜜臀av国产精品久久久久| 欧美国产在线电影| 国产毛片精品视频| 亚洲理论电影网| 欧美一级专区| 亚洲人体1000| 羞羞色国产精品| 欧美h视频在线| 国产欧美日韩91| 日韩视频免费观看高清完整版| 性8sex亚洲区入口| 亚洲国语精品自产拍在线观看| 亚洲自拍偷拍色片视频| 欧美成人精品一区二区三区| 国产欧美va欧美不卡在线| 亚洲精品乱码久久久久久黑人| 欧美伊人久久久久久久久影院| 亚洲黄色免费| 久久九九久精品国产免费直播| 久久尤物视频| 一区二区三区我不卡| 一区二区三区欧美日韩| 美女脱光内衣内裤视频久久影院 | 欧美三级小说| 尤物在线观看一区| 欧美一级在线亚洲天堂| 亚洲欧洲在线观看| 久久综合福利| 国内激情久久| 欧美一区二区高清| 一本久道久久久| 欧美国产精品中文字幕| 亚洲第一页中文字幕| 久久久久九九九| 亚洲欧美制服中文字幕| 国产精品成人在线观看| 夜夜夜久久久| 亚洲精品国产精品乱码不99按摩| 久久亚洲不卡| 在线观看视频日韩| 快射av在线播放一区| 欧美在线观看网址综合| 国产欧美日韩中文字幕在线| 亚洲欧美高清| 亚洲天堂av综合网| 欧美色道久久88综合亚洲精品| 日韩一级黄色av| 亚洲精品欧美一区二区三区| 欧美日韩成人一区二区| 一区二区欧美视频| 妖精视频成人观看www| 欧美日本网站| 亚洲视频一二| 亚洲午夜伦理| 国产真实久久| 美国十次了思思久久精品导航| 久久精品一区| 亚洲三级免费电影| 一区二区国产在线观看| 国产精品乱子久久久久| 久久爱www| 久久久久一区二区三区| 亚洲黄色三级| 亚洲精品免费网站| 欧美亚洲成人免费| 久久成人国产| 蜜桃av一区二区三区| 正在播放日韩| 午夜精品美女久久久久av福利| 国产综合久久久久久| 欧美成人一区在线| 欧美性色综合| 欧美成年人网站| 欧美视频网址| 久久躁日日躁aaaaxxxx| 欧美精品久久天天躁| 午夜日本精品| 美女黄毛**国产精品啪啪| 国产精品久久99| 久久久久久高潮国产精品视| 欧美成人一品| 欧美日韩精品免费观看视一区二区 | 一区一区视频| 亚洲欧洲日韩在线| 国产美女精品人人做人人爽| 欧美激情女人20p| 国产精品尤物| 亚洲国产精品久久久久婷婷884 | 欧美日韩1区2区| 久久网站热最新地址| 欧美日韩在线综合| 免费久久99精品国产自| 国产精品一区二区久久国产| 欧美激情视频一区二区三区免费| 国产乱人伦精品一区二区 | 亚洲欧美视频| 欧美aa国产视频| 久久免费视频网站| 国产精品系列在线播放| 亚洲日本免费| 91久久午夜| 久久精品视频在线| 亚洲欧美日韩综合aⅴ视频| 欧美精品系列| 亚洲国产成人一区| 影音先锋国产精品| 久久精品国产99精品国产亚洲性色| 亚洲一区二区三区影院| 欧美电影免费观看| 亚洲大胆人体视频| 亚洲高清不卡av| 久久久欧美精品sm网站| 久久久国产视频91| 国产色爱av资源综合区| 亚洲欧美成人| 欧美一级专区| 国产一区二区三区黄视频| 午夜亚洲福利| 欧美一级精品大片| 国产偷国产偷精品高清尤物| 亚洲在线视频免费观看| 午夜国产精品视频| 国产精品日韩在线播放| 亚洲在线播放电影| 久久成人精品视频| 国产亚洲一区二区三区在线播放 | 欧美日韩在线视频首页| 亚洲日本成人| 亚洲一区久久| 欧美色道久久88综合亚洲精品| 亚洲国产黄色片| 亚洲少妇自拍| 国产精品国产三级国产aⅴ9色| 中文国产成人精品| 久久av在线看| 在线观看亚洲视频| 欧美国产欧美亚州国产日韩mv天天看完整| 欧美国产日韩视频| 亚洲人成欧美中文字幕| 欧美日韩三级一区二区| 亚洲网站在线| 久久夜色精品国产欧美乱| 91久久视频| 国产欧美婷婷中文| 蜜桃久久av一区| 一本一道久久综合狠狠老精东影业 | 国内精品视频一区| 美女诱惑黄网站一区| 日韩天堂在线观看| 久久精品99无色码中文字幕 | 9l国产精品久久久久麻豆| 亚洲在线一区| 伊人男人综合视频网| 欧美日本亚洲| 久久高清国产| 亚洲乱码久久| 久久这里只精品最新地址| 亚洲作爱视频| 在线欧美亚洲| 国产精品免费福利| 欧美成人午夜激情视频| 午夜亚洲影视| 艳女tv在线观看国产一区| 另类尿喷潮videofree | 亚洲精品在线视频| 国产日韩亚洲欧美综合| 欧美mv日韩mv国产网站| 亚洲欧美一区二区原创| 亚洲日韩视频| 免费观看成人鲁鲁鲁鲁鲁视频 | 很黄很黄激情成人| 欧美日韩福利在线观看| 久久国产夜色精品鲁鲁99| 夜夜嗨av一区二区三区| 欧美激情91| 久久影院午夜论| 欧美一二三视频| 中文久久精品| 亚洲精品之草原avav久久| 尤物九九久久国产精品的特点| 国产精品久久一级| 欧美天天影院| 欧美日韩一二区| 欧美日韩的一区二区| 欧美国产精品va在线观看| 美女精品自拍一二三四| 久久精品夜色噜噜亚洲a∨| 国内外成人免费视频|