uiwidget是所有ui元件的基類,持有ui元件的大小,錨點,頂點,顏色,alpha等所有跟渲染相關的屬性。
關鍵屬性:
protected pivot mpivot //錨點
protected color mcolor; //顏色
protected int mwidth;//元件寬度
protected int mdepth = 0;//顯示深度,這個深度是相對於父節panel的
public uigeometry geometry;//geometry物件用來儲存頂點,位置,頂點uv,頂點顏色等資訊
public uidrawcall drawcall;//當前uiwidget所使用的繪製物件
protected bool mchanged = true;//記錄所有幾何和渲染屬性是否發生變化 如果發生變化就要在updategeometry裡面重新計算頂點資訊
public bool fillgeometry = true;//是否允許填充頂點資訊
public override vector3 localcorners //get方法 獲得uiwidget的4個頂點的區域性座標,順序是:左下,左上,右上,右下
public override vector3 worldcorners//get方法 獲得uiwidget的4個頂點的世界座標系座標,這個方法實際上就是將區域性座標轉化為世界座標
關鍵方法:
一.updategeometry() 核心方法,更新ui元件的頂點資訊。但是這裡不並執行渲染,這個方法只是更新了uiwidget渲染所需要的資料,然後panel會把這些資料傳給drawcall,讓drawcall執行渲染。簡單說就是uiwidget負責計算資料,drawcall把計算好的資料拿來渲染。
部分**:
//獲得通過計算的最終alpha值,如果不為0要跟上層節點進行混合計算
float finalalpha = calculatefinalalpha(frame);
//是否發生了變化
if (mchanged)
//是否有丁點
if (geometry.hasvertices)
//把當前的頂點座標 轉換為相對于父pane的頂點座標
mmoved = false;
return true; }
return hadvertices; }
else if (geometry.hasvertices)
二. onfill() 方法,填充頂點資訊:計算出頂點資訊,然後把頂點資訊填充到geometry裡面,不過在這裡onfill是空的.因為每種元件計算頂點的方式都不一樣,所以onfill由子類來實現.任何幾何和渲染屬性(比如錨點,大小,顏色,alpha,位置)發生變化,都會導致這個方法被呼叫,通常這個方法也是最消耗cpu的.特別是一些tween動畫會導致onfill反覆呼叫,所以建議附加在ui上的動畫時間不宜過長。感覺這個地方優化空間還是挺大的。
uigeometry:用來儲存頂點資訊的類,這個類很簡單,主要屬性有:
public betterlistverts = new betterlist();//儲存頂點位置資訊
public betterlistuvs = new betterlist();//儲存uv座標
public betterlistcols = new betterlist();//儲存顏色資訊
二 LinkedList原始碼分析
二 linkedlist原始碼分析 上篇看了下arraylist原始碼,這篇記錄下linkedlist原始碼分析 linkedlist 繼承 abstractsequentiallist 提供了對元素順序訪問的抽象 linkedlist 實現 deque介面,底層構成雙向鍊錶結構 linkedlis...
Spring原始碼分析(二)
針對spring中bean初始化時擴充套件類執行順序進行分析 通過getbean逐層最終到bean例項化前後呼叫的方法,主要是aware介面 beanpostprocessor initializingbean init method的呼叫順序 abstractbeanfactory dogetbe...
Jquery原始碼分析 二)
prk 2008 08 12 型別 說明 dom element 第乙個引數為dom元素,第二個引數不用。直接把dom元素存在新生成的jquery物件的集合中。返回這個jquery物件。構建jquery物件完成。string 第乙個引數為string有三種情況 1 html的標籤字串,html ar...