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

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

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

常用鏈接

留言簿(21)

隨筆分類

隨筆檔案

SDL相關網(wǎng)站

我的個人網(wǎng)頁

我的小游戲

資源下載

搜索

  •  

積分與排名

  • 積分 - 495654
  • 排名 - 39

最新評論

閱讀排行榜

評論排行榜

作者:龍飛

1.1:為了按鈕做準備

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

1.2:為SurfaceClass設計基類

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

1.3:如何深度復制SDL_Surface ?

        因為PictureSurface和TextSurface的構(gòu)造函數(shù)都涉及到了堆操作,也就是說,SDL_Surface是建立在堆上的。我們需要通過基類的復制構(gòu)造函數(shù)復制SDL_Surface,必須找到合適的工具。具體來說,新對象的pSurface必須指像一個新建立起來的SDL_Surface對象,而非被復制的對象本身。
        我最先想到的是用new...delete組合,但是失敗了。為什么呢?我們研究SDL_Surafce結(jié)構(gòu)本身,發(fā)現(xiàn)在之中包含著一些其它的指針。比如SDL_PixelFormat *format和void *pixels。也就是說,SDL_Surface本身的構(gòu)建也有堆操作,而且,因為SDL_Surafce是C風格的結(jié)構(gòu)而不是類,它不能提供深度復制的操作,所以,即使我們用new為SDL_Surface申請了新空間,SDL_Surface本身也不會為format和pixels申請新的副本。當被釋放掉原本的時候,副本將尋找不到原本的format和pixels,從而產(chǎn)生錯誤。
        我們另外能找到的可以深度復制SDL_Surface的函數(shù),是:
SDL_Surface *SDL_DisplayFormat(SDL_Surface *surface);
SDL_Surface *SDL_ConvertSurface(SDL_Surface *src, SDL_PixelFormat *fmt, Uint32 flags);
        這兩個函數(shù)貌似都是可行的。實際上,基本上也都是可行的。但是涉及到文字的時候,SDL_DisplayFormat將不能正確的轉(zhuǎn)換Blended和Shaded的文字,所以,最后只能使用SDL_ConvertSurafce()。
 新構(gòu)建的SurfaceClass源代碼見:
http://www.shnenglu.com/lf426/archive/2008/04/14/47038.html
posted on 2008-04-17 12:37 lf426 閱讀(2286) 評論(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>
            美乳少妇欧美精品| 亚洲欧洲日产国码二区| 99在线精品观看| 欧美精品激情| 亚洲视频视频在线| 亚洲视屏在线播放| 国产精品区一区| 久久精品亚洲一区| 久久国内精品视频| 亚洲高清视频的网址| 亚洲第一精品在线| 欧美日韩国产三级| 欧美一级网站| 久久免费黄色| 亚洲精品美女在线观看| 99精品热视频| 国产精品亚洲成人| 免费观看成人| 欧美日韩久久久久久| 香蕉成人伊视频在线观看| 欧美一区二区三区视频免费播放 | 一区二区福利| 日韩一级黄色片| 国产日本欧美一区二区三区| 久久久噜噜噜久久中文字免| 玖玖在线精品| 亚洲欧美成人综合| 久久人人超碰| 亚洲视频一区二区| 久久免费黄色| 亚洲午夜羞羞片| 久久久噜噜噜久久久| 亚洲美女尤物影院| 欧美一区二区三区在线视频 | 久久―日本道色综合久久| 亚洲高清色综合| 亚洲性视频网址| 亚洲国产精品高清久久久| 一区二区三区视频观看| 在线看一区二区| 国产精品99久久久久久久久| 在线观看免费视频综合| 亚洲婷婷在线| 日韩视频免费| 久久久999成人| 欧美一区二区三区视频在线观看| 欧美成人午夜剧场免费观看| 欧美一激情一区二区三区| 欧美成人69av| 美日韩精品视频| 国产视频在线观看一区| 一本色道婷婷久久欧美| 亚洲人成久久| 久久亚洲免费| 久久久久久久久综合| 国产精品另类一区| 日韩视频永久免费| 亚洲国产一区在线| 久久久久国产一区二区三区| 午夜精品免费视频| 欧美先锋影音| 中日韩视频在线观看| 99av国产精品欲麻豆| 久久精品成人| 久久久久久夜精品精品免费| 国产精品午夜在线观看| 在线视频你懂得一区二区三区| 亚洲人成毛片在线播放女女| 久久婷婷丁香| 欧美高清你懂得| 亚洲国产裸拍裸体视频在线观看乱了| 久久精品女人| 美女999久久久精品视频| 国产视频一区免费看| 新狼窝色av性久久久久久| 欧美在线3区| 国产主播一区二区| 久久久精品国产一区二区三区 | 国产精品视频福利| 在线亚洲欧美| 香蕉亚洲视频| 狠狠色丁香婷综合久久| 欧美一区二区三区的| 久久精品成人| 好吊一区二区三区| 美女被久久久| 亚洲精品在线观看视频| 一区二区三区你懂的| 欧美性事在线| 欧美一级片在线播放| 久久久综合网| 亚洲黄页视频免费观看| 欧美日本高清| 亚洲欧美精品在线观看| 久久久在线视频| 日韩视频免费在线| 国产乱码精品一区二区三区五月婷| 亚洲欧美日韩精品一区二区| 玖玖国产精品视频| 亚洲人成人一区二区在线观看| 欧美精品福利在线| 亚洲一区欧美二区| 欧美国产欧美亚洲国产日韩mv天天看完整 | 亚洲裸体俱乐部裸体舞表演av| 欧美日韩国产一中文字不卡 | 中文有码久久| 国产精品一级二级三级| 久久精品国产久精国产爱 | 一区二区三区视频在线播放| 欧美午夜精品久久久久久久| 亚洲免费视频成人| 亚洲高清久久久| 亚洲综合清纯丝袜自拍| 亚洲大胆美女视频| 欧美午夜女人视频在线| 久久av在线| 99精品视频免费在线观看| 久久精品日韩欧美| 亚洲一级黄色av| 亚洲成人直播| 国产精品入口麻豆原神| 男人的天堂亚洲在线| 亚洲综合色丁香婷婷六月图片| 亚洲国产cao| 久久成人一区二区| 中文有码久久| 亚洲黄色三级| 国产亚洲一级高清| 国产精品久久久久999| 久久婷婷国产综合尤物精品| 亚洲综合第一| 一区二区三区国产精华| 欧美成人a视频| 欧美尤物一区| 午夜精品在线看| 99精品视频免费全部在线| 一色屋精品视频免费看| 国产人成一区二区三区影院| 欧美系列精品| 欧美午夜精品久久久久久人妖| 欧美大秀在线观看| 麻豆成人在线| 久久综合亚洲社区| 久久久亚洲午夜电影| 欧美一区二区三区电影在线观看| 一区二区三区国产盗摄| 99国产精品久久久久久久久久| 亚洲人成人一区二区在线观看| 亚洲成人在线免费| 奶水喷射视频一区| 久久久久女教师免费一区| 午夜精品久久久久久久99热浪潮 | 久久青青草综合| 久久婷婷国产综合国色天香| 久久久91精品国产一区二区三区 | 久久久亚洲成人| 久久精品国产久精国产思思| 亚洲欧洲av一区二区| 香蕉久久久久久久av网站| 欧美亚洲三区| 久久久蜜桃精品| 免费观看在线综合| 亚洲成色777777在线观看影院| 欧美激情一区二区三区在线| 亚洲大胆av| 日韩午夜激情av| 亚洲欧美成人一区二区三区| 亚洲一级二级在线| 欧美在线视屏| 欧美第一黄色网| 国产精品高潮呻吟久久av无限| 国产精品视频导航| 在线视频国内自拍亚洲视频| 亚洲七七久久综合桃花剧情介绍| 一区二区动漫| 久久成人人人人精品欧| 欧美不卡福利| 99国产精品视频免费观看| 亚洲中无吗在线| 久久五月激情| 欧美四级在线观看| 国产自产女人91一区在线观看| 在线观看91久久久久久| 一区二区三区免费观看| 久久精品亚洲一区二区| 亚洲国产精品久久久久婷婷884 | 午夜精品一区二区三区四区| 欧美亚洲视频一区二区| 欧美成人综合网站| 亚洲一区二区在线免费观看视频| 久久精品中文字幕免费mv| 欧美日韩成人综合| 国内精品美女在线观看| 日韩午夜三级在线| 久久视频在线免费观看| 亚洲视频在线观看免费| 欧美福利小视频| 精品成人一区二区| 亚洲欧美在线aaa| 亚洲精品欧美在线|