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

隨筆 - 96  文章 - 255  trackbacks - 0
<2008年5月>
27282930123
45678910
11121314151617
18192021222324
25262728293031
1234567

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

常用鏈接

留言簿(21)

隨筆分類

隨筆檔案

SDL相關網站

我的個人網頁

我的小游戲

資源下載

搜索

  •  

積分與排名

  • 積分 - 495175
  • 排名 - 39

最新評論

閱讀排行榜

評論排行榜

作者:龍飛

2.1:設計框架與基類的接口

        有了更加完善的SurfaceClass的支持,我們可以進行按鈕的設計了。接著上一節的話題,按鈕除了要給我們表現出來是否被按下的視覺效果,還要起到實際上的作用。一種最簡單的思路,既是鼠標在按鈕上一旦按下,程序就馬上響應。這種思路很樸素,也很實用。大名鼎鼎的QuakeIII的菜單按鈕就是這么設計的,這樣我們幾乎是可以直接使用SDL的事件響應,即:事件不為空——鼠標事件的左鍵按下——響應處理。
        但是也許我們已經習慣更加人性話的GUI按鈕了。比如,如果是不小心點錯了,馬上響應意味著沒有機會改正操作失誤。事實上,我們仔細分析當今GUI上的按鈕,可以發現按鈕的實際效果,是在按下鼠標,并且又松開的時候產生的響應。其實這樣說也并不完全準確,更加準確的描述,應該是鼠標既要在按鈕上按下,又要在按鈕上松開——其實這還是不完整,我想說的是,為了描述這個復雜的狀態,我們不得不在ButtonClass中引入幾個bool量,以判斷按鈕是否真正起作用。
        按鈕的構成與視覺效果,根據我們之前的知識,大概具有這幾類:完全由PictureSurface組成,這又分為兩類,兩張Picture(out和over)或者三張Picture(再加張down);由TextSurface組成;由一張精靈圖的PictureSurafce切分出來。他們的接口幾乎是一樣的:設置位置和按下時的偏移(setup),扣色(colorkey),添加文字(addText),顯示(blit),鼠標事件判斷(mouse out, over, down, up 甚至是 up outside)和有效點擊(effectiveClick)。所以,我們有理由用基類來規定這些接口。或者說,用ABC(抽象基類)的純虛函數硬性規定這些接口。

2.2:鼠標事件判斷與有效點擊

移動:SDL_MOUSEMOTION
觸發的開關是鼠標發生了移動。我們需要判斷鼠標是否移動到了按鈕上,或者移動到了不是按鈕區域的地方;
點擊:SDL_MOUSEBUTTONDOWN
觸發條件是鼠標按下了,我們需要進一步判斷是不是左鍵按下了(gameEvent.button.button == SDL_BUTTON_LEFT ),然后判斷是不是在按鈕區域內按下的。
松開:SDL_MOUSEBUTTONUP
觸發條件是鼠標松開了,我們需要進一步判斷是不是左鍵松開了(gameEvent.button.button == SDL_BUTTON_LEFT ),然后判斷是不是在按鈕區域內松開的。
按鈕外松開:SDL_MOUSEBUTTONUP
觸發條件是鼠標松開了,我們需要進一步判斷是不是左鍵松開了(gameEvent.button.button == SDL_BUTTON_LEFT ),然后判斷是不是在按鈕區域內松開的。
        我們之所以需要做這些判斷,是為了構建我們剛才設想中的按鈕效果,即有效點擊(effectiveClick)。因為有效點擊不是通過一次事件的判斷完成的,我們通過三個bool量在整個按鈕的生命周期類描述按鈕所接收到的鼠標事件:inBox鼠標在按鈕區域內;clickDown鼠標在按鈕區域類被按下過(并且沒有在外面松開);clickUp鼠標在按鈕區域內松開。我們來看看這段代碼吧……我承認,if得很混亂,但是居然能正常工作,呵呵。
bool BaseButton::effectiveClick(const SDL_Event& game_event)
{
    inBox 
= this->mouseOver(game_event);
    
if ( this->mouseDown(game_event) == true ){
        clickDown 
= true;
        inBox 
= true;
    }
    
if ( this->mouseUp(game_event) == true ){
        
if ( clickDown == true )
            clickUp 
= true;
        inBox 
= true;
    }
    
if ( this->mouseUpOutside(game_event) == true )
        clickDown 
= false;

    
if ( inBox == true && clickDown == false ){
        
this->blitOver();
        
return false;
    }
    
else if ( inBox == true && clickDown == true ){
        
if ( clickUp == true ){
            clickUp 
= false;
            clickDown 
= false;
            
this->blitOver();
            
return true;
        } 
else {
            
this->blitDown();
            
return false;
        }
    }
    
else {
        
this->blitOut();
        
return false;
    }
}
        最有意思的是,我們可以把這個函數構建在基類中——即使blitxxx()這類的函數都是純虛函數——但是他們已經代表了算法。在用不同的派生類調用基類的這個方法的時候,blitxxx()會被替換成相應派生類的版本,從而減少了重復寫代碼的工作。

2.3:ButtonClass的源代碼
http://m.shnenglu.com/lf426/archive/2008/04/15/47156.html
posted on 2008-04-19 12:18 lf426 閱讀(3584) 評論(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这里只有久久精品视频| 一本综合久久| 亚洲欧美福利一区二区| 欧美在线观看视频一区二区三区 | 亚洲欧美激情一区| 红桃视频国产精品| 欧美激情一区二区三区四区| 欧美理论片在线观看| 国产精品入口福利| 一区二区在线不卡| 在线一区亚洲| 麻豆久久婷婷| 亚洲淫性视频| 欧美v日韩v国产v| 国产精品夜夜夜| 亚洲免费播放| 久久人人97超碰国产公开结果| 亚洲大片在线观看| 亚洲欧美制服中文字幕| 欧美高清视频www夜色资源网| 国产精品久久久久影院色老大| 136国产福利精品导航网址应用| 亚洲无线视频| 亚洲第一在线视频| 久久精品国产一区二区三| 欧美日韩国产影院| 在线成人av| 久久精品国产第一区二区三区最新章节| 麻豆成人在线| 午夜精品一区二区三区电影天堂 | 久久米奇亚洲| 国产视频久久网| 亚洲综合色在线| 亚洲免费高清视频| 欧美激情在线| 亚洲激情在线播放| 久久综合成人精品亚洲另类欧美| av成人黄色| 欧美日韩国产综合一区二区| 亚洲国产老妈| 蜜桃av一区二区在线观看| 午夜亚洲影视| 国产婷婷色一区二区三区| 亚洲欧美国产不卡| 在线视频亚洲一区| 国产精品久久久久三级| 亚洲一区二区三区高清| 亚洲美女黄网| 欧美午夜一区二区三区免费大片 | 免费不卡欧美自拍视频| 影音先锋在线一区| 免费不卡在线视频| 久久深夜福利| 91久久精品日日躁夜夜躁国产| 久久久久久亚洲精品杨幂换脸| 亚洲欧美激情一区| 国产亚洲福利一区| 欧美三级不卡| 欧美三级在线视频| 亚洲性感美女99在线| 韩国成人福利片在线播放| 国产美女诱惑一区二区| 午夜日韩av| 亚洲欧美日韩在线综合| 国产精品美女久久久久久免费| 亚洲欧美日韩精品久久亚洲区 | 美女脱光内衣内裤视频久久影院| 一区二区在线视频| 亚洲国产精品成人精品| 欧美看片网站| 午夜精品一区二区三区四区| 欧美一区二区三区播放老司机 | 亚洲国产精品123| 亚洲日韩欧美视频| 国产精品久久久久久久app| 午夜一级久久| 久久久久久久综合日本| 99re热这里只有精品视频 | 欧美 日韩 国产在线| 99视频精品在线| 亚洲欧美日韩在线不卡| 亚洲高清激情| 亚洲一级二级在线| 亚洲第一网站| 亚洲香蕉伊综合在人在线视看| 伊人久久成人| 亚洲性视频网站| 亚洲人体影院| 久久精品国产亚洲a| 一区二区三区国产盗摄| 欧美一区二区免费| 亚洲一区二区在线观看视频| 久久久久久久一区二区| 亚洲嫩草精品久久| 欧美韩日一区| 蜜桃av久久久亚洲精品| 欧美视频一区二区在线观看| 麻豆成人91精品二区三区| 国产精品久久久久久久久久久久久久 | 黄色一区二区三区| 一本色道久久99精品综合| 国模精品一区二区三区色天香| 亚洲国产精品成人一区二区| 国产人成一区二区三区影院| 亚洲另类春色国产| 亚洲国产精品成人综合色在线婷婷| 在线视频欧美一区| 亚洲毛片在线观看.| 久久久精品国产免大香伊| 欧美14一18处毛片| 欧美日韩一区二区在线观看视频 | 狠狠色综合网| 午夜精品视频在线观看一区二区| 欧美 日韩 国产一区二区在线视频| 欧美怡红院视频一区二区三区| 欧美日韩国产91| 亚洲国产日韩在线| 亚洲激情av在线| 狼人社综合社区| 久久免费偷拍视频| 国产一区二区无遮挡| 亚洲欧美日本伦理| 亚洲男人的天堂在线| 欧美日韩视频免费播放| 亚洲人成在线播放| 日韩视频在线一区二区| 欧美国产另类| 91久久线看在观草草青青| 亚洲精品社区| 欧美岛国在线观看| 亚洲国产美女精品久久久久∴| 亚洲国产精品一区二区三区| 久久狠狠婷婷| 美女尤物久久精品| 91久久夜色精品国产九色| 欧美不卡视频| 亚洲精品在线免费观看视频| 一本到12不卡视频在线dvd| 欧美激情一级片一区二区| 亚洲国产日韩欧美| 亚洲一区二区三区高清不卡| 欧美视频在线观看免费| 亚洲一级网站| 麻豆精品视频在线观看视频| 亚洲人成网站精品片在线观看| 麻豆国产精品va在线观看不卡 | 久久精品亚洲热| 欧美不卡在线| 夜夜夜久久久| 国产欧美精品一区| 久久亚洲国产成人| 91久久久久久久久| 性色av一区二区怡红| 狠狠色2019综合网| 欧美精品在线视频观看| 亚洲欧美在线免费| 91久久视频| 久久国产精品一区二区三区四区| 亚洲成在人线av| 国产精品hd| 久久精品视频免费观看| 亚洲免费观看高清完整版在线观看熊| 亚洲电影观看| 国产精品高潮久久| 久久综合伊人77777尤物| 日韩午夜激情| 欧美成人嫩草网站| 亚洲欧美中文字幕| 亚洲精品小视频| 国产一区久久| 国产精品theporn88| 久久久99国产精品免费| 亚洲美女精品久久| 欧美高清hd18日本| 欧美一区二区视频在线观看2020| 亚洲欧洲一区二区三区久久| 国产欧美日韩精品一区| 国产精品国产成人国产三级| 国内精品视频一区| 国产精品啊v在线| 两个人的视频www国产精品| 中国成人黄色视屏| 亚洲大胆女人| 久久精品夜夜夜夜久久| 在线视频精品| 91久久国产综合久久91精品网站| 国产日韩欧美在线一区| 国产精品家教|