• <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>

            牽著老婆滿街逛

            嚴(yán)以律己,寬以待人. 三思而后行.
            GMail/GTalk: yanglinbo#google.com;
            MSN/Email: tx7do#yahoo.com.cn;
            QQ: 3 0 3 3 9 6 9 2 0 .

            Cocos2d-x 屏幕適配解決方案

            轉(zhuǎn)載自:http://www.9miao.com/content-6-715.html

            第一,對于屏幕適配問題,首先必須理解幾個基本的概念。


            FrameSize:實際上就是設(shè)備的原始分辨率,開發(fā)環(huán)境中可以通過CCEGLView::sharedOpenGLView()->setFrameSize()來設(shè)置設(shè)備的分辨率大小,當(dāng)然也可以可以通過CCEGLView::sharedOpenGLView()->getFrameSize()獲取得到設(shè)備的分辨率

             

            WinSize:開發(fā)所設(shè)計的分辨率,即setDesignResolutionSize方法中傳入的前兩個參數(shù),通過CCDirector::sharedDirector()->getWinSize()獲取

             

            VisibleSize:一定小于等于WinSize,即在WinSize范圍之內(nèi),保持FrameSize寬高比的最大顯示區(qū)域。

             

            VisibleOrigin:在WinSize下被FrameSize截取的區(qū)域大小,即設(shè)計分辨率中與屏幕左下角對應(yīng)的點。

             

            第二,cocos2d-x自帶的三種適配方案


            這里我們將設(shè)備的分辨率改為768*1024,開發(fā)設(shè)計的分辨率為640*960,背景圖為大小為640*960,在屏幕居中顯示,cocos2d-x默認(rèn)的適配方案得到的效果:


            blob.png


            可以看出由于沒有采用合理的適配方法,圖像會根據(jù)我們設(shè)置的位置顯示大小,如果圖像本身比設(shè)備分辨率大,則只顯示設(shè)備分辨率大小的圖像,反之則會留有空余處,如上圖的黑邊。如我們采用下面三種基本的適配方案又會得到不同的效果

             

            kResolutionExactFit:通過拉伸來填滿屏幕,寬高比不同,圖片無法等比縮放來填充屏幕,圖片會扭曲變形,如圖中間的人物原先是正方形的,現(xiàn)在變成了長方形,界面稍復(fù)雜,就會看見明顯的不協(xié)調(diào),這種方式通常不可取。


            blob.png



            kResolutionNoBorder:無黑邊,寬高等比縮放,但縮放的比例按照寬比和高比中大的來進(jìn)行。這樣出現(xiàn)的結(jié)果可能就是有圖片的一部分會顯示在屏幕的外面。


            blob.png



            kResolutionShowAll:全部顯示,保證內(nèi)容在屏幕內(nèi)顯示,同樣是寬高等比縮放,但縮放比例取小的進(jìn)行。按這種方式適配可能會在屏幕上出現(xiàn)黑邊,如果打算在黑邊出填放別的精靈是無效的,因為等比縮放后,黑邊的部分不會進(jìn)行繪制。假如設(shè)計分辨率低于大部分設(shè)備分辨率,在忽略黑邊的情況下,這種適配方式可以滿足大部分設(shè)備,而我們后面改進(jìn)的適配方案就是把留出來的黑邊利用上


            blob.png


            以上三種適配方式雖然能在一定問題上能解決適配的問題,不過對于現(xiàn)今各式各樣、眾多分辨率的設(shè)備來說,想要一套資源適配所有設(shè)備而不做資源的更改是不可能的,這點必須明白。沒有一種完美的適配方案,而我們所做的不過是盡量更完善,那如何找到一種行之有效的適配方案呢?在保持圖像基本不變形的情況下我們可以對第二種,第三種適配方案進(jìn)行改進(jìn)。

             

            根據(jù)設(shè)備分辨率改變WinSize的大小:



            由這個思路,假如我們預(yù)設(shè)WinSize為(640,960),先計算設(shè)備分辨率和設(shè)計分辨率的寬比與高比

            float scaleX=frameSize.width/designSize.width;

            float scaleY=frameSize.height/designSize.height;

            在第三種方案基礎(chǔ)上進(jìn)行改進(jìn),依舊選擇寬高比小的進(jìn)行縮放,這里選擇scaleY,由于第三種方案會產(chǎn)生黑邊,而我們又無法利用黑邊,所以改進(jìn)的方案就是把黑邊利用上,那如何利用上呢?前面說過,黑邊是由于寬高比例不同造成的,這樣我們可以反過來思考,讓設(shè)備分辨率和設(shè)計分辨率寬高比一致。所以在這種前提下,我們得到了一種解決辦法,假設(shè)設(shè)備兩者的寬高比一致的情況下,WinSize的寬高為多少才合適,在本例中我們需要算出WinSize的寬,計算方法如下:

            frameSize.width/scaleY;

            將計算出來的寬和我們預(yù)設(shè)的設(shè)計分辨率的高作為傳入的WinSize的值,這樣我們就能把黑邊利用上了

            pEGLView->setDesignResolutionSize(frameSize.width/scaleY,designSize.height,kResolutionShowAll);


            blob.png



            但運行的結(jié)果和kResolutionShowAll似乎一樣,這是因為黑邊我們雖然已經(jīng)可以利用了,但沒有顯示效果,這里我們現(xiàn)在已經(jīng)可以對黑邊進(jìn)行填充了,效果如下:


            blob.png




            posted on 2014-08-07 16:00 楊粼波 閱讀(883) 評論(0)  編輯 收藏 引用


            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            88久久精品无码一区二区毛片 | 欧美久久久久久| 久久精品日日躁夜夜躁欧美| 怡红院日本一道日本久久 | 亚洲午夜久久久影院| 国产精品免费福利久久| 久久亚洲精品无码观看不卡| 久久亚洲日韩看片无码| 香蕉久久夜色精品国产小说| 亚洲伊人久久综合影院| 久久精品国产99国产精偷| 久久亚洲精品国产亚洲老地址| 国内精品人妻无码久久久影院 | 国产精品久久影院| 91麻豆国产精品91久久久| 久久综合久久综合久久综合| 99久久精品免费看国产一区二区三区| 伊人色综合久久天天| 久久久亚洲欧洲日产国码aⅴ | 久久夜色tv网站| 99精品国产99久久久久久97| 国产伊人久久| 日本精品久久久中文字幕| 久久精品国产亚洲AV无码麻豆| 中文字幕无码久久久| 精品无码久久久久久国产| 情人伊人久久综合亚洲| 久久精品九九亚洲精品| 精品久久久无码21p发布| 久久乐国产综合亚洲精品| 久久人搡人人玩人妻精品首页| 国产精品99久久久久久猫咪| 久久er热视频在这里精品| 久久精品无码专区免费青青| 亚洲乱码精品久久久久..| 亚洲色婷婷综合久久| 亚洲精品国产美女久久久 | 久久最新免费视频| 精品久久人人做人人爽综合| 94久久国产乱子伦精品免费| 99久久精品国产一区二区|