• <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>
            posts - 311, comments - 0, trackbacks - 0, articles - 0
              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理
            GUI中是用depth來控制sprite顯示順序的,本來這很好用,但碰到上面帖子中的問題時卻不好解決了,于是我試驗了下。以下是一些總結,不對的地方請指正。
            下面的內容可能看起來比較繞,這樣的話只需實際試驗下就能很容易的知道結果,呵呵
            如果還是看不明白,可以先看1樓,那里有個總結
             
            1,同一個panel下,同一個atlas的不同sprite的顯示只受depth的控制,這是最經常用的方式。此時不論精靈的z軸如何變化,depth高的一定在前面。
            比如精靈A的z軸是-10,更靠近相機,但它的depth是0,而精靈B的z軸是0但depth是1,那么精靈B還是顯示在前面
            如下圖,0、1、2的前綴分別是三者的depth值,則三者的排列就是如圖的由下到上,2_Label在最上面

             
            現在在depth不變的前提下修改z軸的值。將0_Dark的z軸調為-100,則它離相機更近了,看上去應該擋住后面的兩個才對,但Game場景中三者的關系并沒有改變,也就是說雖然看上去0_Dark應該擋住后面的東西,但并沒有這樣,還是depth起作用,也就是feiben同學所說的“相同atlas其實是共用同一個Z軸深度”。

            2,不同panel下,同一個atlas的不同sprite不受depth的控制,而受z軸控制。此時只需稍微調節下其中一個精靈的z軸就可以,比如0.1,就可以控制sprite的顯示
            比如接著1中的圖,新建一個panel_B,將1_NGUI拖到里面,會看到它蓋住了0和2,現在調節depth不起作用,無論1_NGUI的depth調成多少,都不會改變它在最上面的狀態

            現在調節下1_NGUI的z軸為0.1,則它到了最后面

            而比如現在想把在panel_B中的1_NGUI重新顯示在0和2之間,能辦到么?經過試驗會發現無論怎么調三者的z軸,都不能將NGUI放到1和2之間,因為它們是一個圖集中的精靈,共用一個z軸深度
            比如將0_Dark的z設為100,此時1_NGUI的z軸還是0.1,但1_NGUI重新跑到了最上面,而不是中間

            再把Label的z設為-100,NGUI是被覆蓋了,但Dark也跟著跑到了上面,注意此時三者的空間位置,NGUI的確是在中間的,但還是被后面的Dark擋住了

            你也許會感覺這是自找麻煩,沒事把同一個atlas的精靈放到兩個panel中干什么呢?一般情況下是自找麻煩,但為了解決上面帖子中提到的問題,這是個解決的辦法,如3
             
            3,不同panel下,不同atlas的精靈的穿插,受z軸的控制。
            現在回到帖子中提出的問題,怎么讓多個atlas的sprite能進行穿插。辦法是用多個panel。
            比如有兩個atlas,分別為SiFi和Wooden,而SiFi中有兩個要顯示的精靈Dark和Label,Wooden中有一個要顯示的精靈wooden,現在想把wooden放到Dark和Label之間。那么設置兩個panel,一個放Dark和wooden,另一個放Label,或者一個放Label和wooden,另一個放Dark,只要SiFi圖集中的兩個精靈不在同一個panel中就可以,之后微調其中一個精靈的z軸就可以了,比如調節Label的z軸為-0.1,則如下圖,wooden到了Dark和Label的中間

             
            不過如果認為為什么要這么麻煩呢,只需要在一個panel中調節就可以了,那就回到了2中的問題上,總是在上或在下,而不會在中間
             
            如下圖,三者在一個panel下,現在空間位置是wooden在中間z為0,Dark為100,Lable為-100,且三者的depth也是相應的,但wooden還是在最上面



            現在修改下wooden的z軸,比如改為1,而Dark和Label的z不變,則wooden跑到了最后面,但就是不到中間去





            此外,即使用兩個panel,但同是SiFi圖集中的Dark和Label還是在同一個panel下,而把wooden放到另一個panel中,還是無法達到插入的目的,如下圖,無論怎么調節wooden的z軸,它要么在最前面,要么在最后面


            此時只需把Dark或Label之一放到wooden的panel下就能實現wooden在中間的目的,比如把Dark和wooden放到一起


            而現在有個有趣的想法,就是既然這樣可以達到wooden在中間的目的,那能不能把label放到兩者中間呢?試一下就知道,是可以的。而既然這樣,那Dark能放到兩者中間么,試一下,還是可以的。這就讓定位更加靈活
             
            當然這是最簡單的穿插,如果有多個panel和多個atlas的話情況會比較復雜,此時要記著2中的情況,否則還是容易出現無法穿插的問題。而解決這個問題的方法最好還是atlas設計的時候更全面,讓穿插的sprite在一個atlas中,這樣只用depth深度就可以控制了
             
            4,同一個panel下,不同Atlas的sprite,受z軸控制,depth不起作用。而默認添加的時候覆蓋關系似乎和atlas有關,比如從SiFi圖集和Wooden圖集中分別添加任意一個精靈到同一個panel下,總是SiFi的精靈在下面,此時depth不起作用,可以直接調節z軸比如-0.1就可以
             
            5,(修改)對于panel是否會產生drawcall,之前的試驗存在誤區,當時是直接復制帶著sprite的Panel,這的確會產生新的drawcall,這是因為在復制時panel的scale被修改了,由1變成了0.9999304之類的,這會導致drawcall增加了1個,而之后再復制這個由復制產生的panel,scale還是0.9999304,所以drawcall不會再變。
            現在發現修改panel的縮放scale的確會增加drawcall。所以如果為了方便而復制一個panel的話,別忘了reset它的縮放
             

            而之所以對panel是否會產生drawcall,是因為官方例7中只用了2個Atlas,但drawcall卻是5個,當時簡單的認為是panel的問題。
            亚洲国产成人久久一区久久| 91精品国产综合久久婷婷| 国产毛片久久久久久国产毛片 | 久久国产热精品波多野结衣AV| 久久99精品久久久久子伦| 91久久香蕉国产熟女线看| 久久人人爽人人爽人人片AV高清| 日韩精品久久无码人妻中文字幕| 久久免费视频网站| 久久毛片一区二区| 精品人妻伦一二三区久久| 日日躁夜夜躁狠狠久久AV| 久久精品18| 99久久99久久| 亚洲综合熟女久久久30p| 久久九九有精品国产23百花影院| 久久午夜免费视频| 精品久久人人爽天天玩人人妻| 色狠狠久久AV五月综合| 内射无码专区久久亚洲| 亚洲国产精品久久久久久| 亚洲AV乱码久久精品蜜桃| 伊人久久大香线蕉成人| 国内精品久久久久久不卡影院| 久久狠狠高潮亚洲精品| 亚洲色婷婷综合久久| 亚洲欧美另类日本久久国产真实乱对白| 99久久成人国产精品免费| 人妻无码αv中文字幕久久琪琪布 人妻无码久久一区二区三区免费 人妻无码中文久久久久专区 | 久久激情亚洲精品无码?V| 777米奇久久最新地址| 性欧美丰满熟妇XXXX性久久久| 怡红院日本一道日本久久| 久久91精品国产91久久麻豆| 亚洲精品乱码久久久久久按摩 | 人妻精品久久无码专区精东影业| 亚洲中文字幕伊人久久无码| 久久精品国产亚洲AV不卡| 国内精品久久久久久久涩爱| 精品久久久久久国产牛牛app| 国产三级精品久久|