目錄:ngui原始碼學習
一、uigeometry:儲存了集合圖形的頂點資訊,包括頂點座標、uv、顏色值資訊,並提供了這些資訊的獲取方法。這些頂點資訊最終會新增到所屬uiwidget的uidrawcall裡。
uigeometry:幾何物件資料儲存、獲取property:
verts:頂點陣列,正常是4個
uvs:紋理
cols:顏色
mrtpverts:相對panel的頂點
mrtpnormal:相對panel的法線
mrtptan:相對panel的切線
function:
hasvertices:是否擁有頂點,有頂點才參與繪製
writetobuffers:獲取mrtpverts、uvs、cols、mrtpnormal、mrtptan
二、uiwidget:座標、透明度、大小的更新,在uipanel呼叫。
uilabel、uitexture、uisprite的父類,提供了大部分元件都需要的一些字段,如width、height、depth、color、alpha等等,同時也有一些共同的方法,如較為重要的updategeometry、updatetransform等。
uiwidget:uirectproperty:
mchanged:標記當前是否有修改,有修改則更新矩形
mmoved:標記當前位置是否有更改
geometry:幾何資訊,用來儲存頂點,位置,頂點uv,頂點顏色等資訊,一對一
drawcall:當前uiwidget所屬的dc物件,一對多,乙個dc可以包含多個widget,但乙個widget只能有乙個dc。
drawregion:用來表示乙個widget最後渲染的區域(而不改變widget本身的大小)。例如uiprogressbar進度條就是修改的drawregion而不是width/height。
drawingdimensions:實際顯示區域大小
width&height:get;set;寬高
color:get;set;顏色
misvisiblebypanel:panel是否可見
misvisiblebyalpha:parent是否可見
finalalpha:最終的alpha值
pivot:get;set;錨點,立即生效,rawpivot是設定標記位mchanged
depth:get;set;相對於父節panel顯示層級,會導致dc重建
raycastdepth:get;最終顯示層級,(panel != null) ? mdepth + panel.depth * 1000 : mdepth;並不生效
localcorners/localcenter:get;顯示矩形的四個角資訊,順序是:左下,左上,右上,右下
worldcorners/worldcenter:get;顯示矩形的四個角資訊
material:get;set;材質
maintexture:get;材質球的貼圖
shader:get;材質球的shader
function:
setdimensions:修改矩形大小
getsides:獲取widget四個邊的世界座標
setrect:設定矩形的位置、大小
calculatebounds:bounds包圍盒計算
setdirty:標記需要更新矩形所屬的drawcall
markaschanged:更新矩形以及所屬的drwacall
onanchor:更新矩形大小、座標,設定mchanged
updatevisibility:更新是否可見
updatefinalalpha:更新透明度
updatetransform:更新座標變化
updategeometry:更新geometry資訊,呼叫onfill
onfill:填充geometry,任何幾何和渲染屬性(比如錨點,大小,顏色,alpha,位置)發生變化,都會導致這個方法被呼叫。
通常這個方法也是最消耗cpu的。
converttotexcoords:sprite的x,y對應圖集的左上角,這邊轉成(0,1)範圍的以左下角起點、相對圖集位置的uv點
lateupdate-updateself-updatedrawcalls
updateself-updatetransformmatrix-updatelayers-updatewidgets-fillalldrawcalls-writetobuffers
updatewidgets-updatetransform-updatevisibility-updategeometry
updategeometry-onfill-fill
座標更新updatetransform:呼叫setdimensions設定mmoved=true或trans.haschanged=true時,會重新計算並更新左下、右上角的座標moldv0、moldv1,並通知呼叫updatevisibility。
alpha更新:分三步
geometry更新:
如果mmoved或mchanged(移動、顯示狀態變化)為true,通知所屬的drawcall更新自己。
NGUI 渲染順序概述
ngui渲染順序概述 ngui用panel來管理渲染.乙個uipanel例項表示乙個panel.在渲染時,panel遍歷它管理的所有widgets.生成drawcall命令list.於是ngui需要控制的渲染順序包括以下 ui 是 2d 的,不需要在渲染時開啟深度測試 depth test 因此,若...
NGUI核心元件之UIAtlas
uiatlas是乙個容器,他包含了許多sprite的座標資訊。如果你對這個概念不是很熟悉,你可以這樣理解 與使用很多小的貼圖來渲染ui相比,使用一張包含了所有小貼圖的大貼圖的效率要高許多。這些小的貼圖就被叫做sprite,這個大的貼圖就被叫做atlas。在使用ngui渲染任何東西之前,首先需要建立乙...
react 八 父元件渲染,子元件不渲染
父元件渲染,子元件跟著渲染,不論引數是否變化,這是個坑 解決思路 步驟一 將html內容新增到狀態變數 constructor 步驟二 在render中將html替換成狀態變數 步驟三 觸發子元件渲染時,設定狀態變數 handlescroll 底部元件響應樣式 scrolltop 900?local...