• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • UI框架簡介(三)

    標簽: ui  框架

    我們繼續上面內容啊!
    我個人建議呢!框架不需要我們去寫,那么我們拿到一套框架,首先應該應該看哪里呢?你想啊,如果你從框架入口區看的話,是可以,但是它所涉及到的繼承和各種管理,各種關聯會有很多的。看起來比較費勁。我就覺得從一個簡單的類看起來比較容易。那么框架中什么樣的比較容易讀懂呢?

    答案就是:工具層,這些類只是提供工具方法的,方便其他類去調用的,看起來簡單,易理解。那么我們為什么要看這寫類呢?因為我們在后面開發時可能會用到這些封裝好的工具類里面的內容。這樣我們只需調用就行了,不需要去關心里面邏輯是怎么寫的。這就是面向對象編程中封裝的思想哦!只提供對公開的訪問方法。不需要關心內部如何實現的邏輯。

    ***************工具層代碼講****************
    我們從簡單的類來看起啊!
    這個Const類簡單吧!是不是很開心啊!框架中還有這么簡單的東西啊!瞬間有了自信了吧!
    這里寫圖片描述

    這個類就是把一些字符串路徑存儲起來的,這樣寫起來不易出錯。

    繼續往下:Resourece類,見名思意,很明了嘛!用來加載各種資源的。

    這里寫圖片描述

    看里面提供了這么多封裝好的各種加載方法。我只會挑其中一個講解一下!因為其他的邏輯都是差不多的。那么我就使用加載精靈圖片演示了!

    思路:加載精靈圖片嘛!肯定是resources加載啊!我這里只不過是對其多了一層包裝而已啦!。先要有一個路徑。然后判斷一下這個obj有沒有被加載過,如果是第一次的話,就進入if判斷里面,然后先清楚一下緩存。然后用resources加載。然后添加到hashtable中管理起來。最后返回這個對象即可。
    這是具體實現的代碼:

     #region 加載精靈圖片的方法
    
        /// <summary>
        /// 加載精靈圖片的方法
        /// </summary>
        /// <param name="path"></param>
        /// <returns></returns>
        public static Sprite LoadSprite(string path)
    {
    
            object obj = Resource.images[path];
            if (obj == null)
            {
                Resource.images.Remove(path);
                Sprite sprite = (Sprite)Resources.Load(path, typeof(Sprite));
                Resource.images.Add(path, sprite);
                return sprite;
            }
    
            return obj as Sprite;
        }
    
        #endregion

    最后一個工具類了哦!
    同樣我也只拿一個方法來講解哦!

    這里寫圖片描述

    額!選哪個呢?就這個吧!比較長的。
    思路:由于我們添加的組件不確定,我們就使用泛型方法吧!在加一個泛型約束。讓他只能添加組件。
    方法中傳入一個參數(要添加組件的游戲物體),那么我們先得把舊的組件移除。然后添加新的組件。而且我還提供了一個重載版本吧!

     #region 添加腳本組件
    
        //給go添加腳本組件
        public static T Add<T>(GameObject go) where T : Component
        {
            if (go != null)
            {
                //先刪除舊的組件
                T[] components = go.GetComponents<T>();
                for (int i = 0; i < components.Length; i++)
                {
                    if (components[i] != null)
                    {
                        Destroy(components[i]);
                    }
                }
                //新添組件
                return go.gameObject.AddComponent<T>();
            }
            return (T)((object)null);
        }
    
        //重載版本
        public static T Add<T>(Transform go) where T : Component
        {
            return Util.Add<T>(go.gameObject);
        }
    
        #endregion

    好了!這些就是我們工具類,怎么樣,看起來簡單吧!(PS:實際也是比較簡單的哦!)

    **************管理層代碼講解****************

    下面我們繼續看Manager管理層吧!

    這里寫圖片描述

    這是一個讀表類,為什么要有這個類呢?那是因為一個項目中會有策劃給我們配置的各種表,需要我們從表中讀取信息的。
    比如這些json表:
    這里寫圖片描述

    那么我們這個類就是來解析這些策劃配置的表的。
    好,我們來講解讀取一個ItemData表的思路吧!好,既然需要讀表我們需要先創建一個類來接收數據吧!我以ItemData為例吧!那么我們先看這個類吧!
    這是我們背包的數據存放的地方。然后我們使用讀表單例去讀。

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    /// <summary>
    /// 背包物品的數據
    /// </summary>
    public class ItemData
    {
    
        public string itemId;
    
        public string ItemId
        {
            get
            {
                return itemId;
            }
            set
            {
                itemId = value;
            }
        }
    
        public string itemType;
        public string itemName;
        public string itemNum;
        public string itemIcon;
    
    }
    
    
    //讀表類
    
    private Dictionary<int, ItemData> m_itemData;//字典的聲明,用來存儲表中的對象的
    //提供一個get屬性,用來讀取m_itemData這個字典的
        private Dictionary<int, ItemData> ItemData
        {
            get
            {
                if (m_itemData == null)
                {
                    LoadTableData(STATIC_DATA_PATH, "ItemData", out m_itemData);
                    if (m_itemData == null)
                    {
                        Util.ThrowError("無法加載 ItemData 數據");
                        return null;
                    }
                }
                return m_itemData;
            }
        }
    
    #region 解析json表,返回這個ISON整張大表
        /// <summary>
        /// 解析json表,返回這個表
        /// </summary>
        /// <typeparam name="K"></typeparam>
        /// <typeparam name="V"></typeparam>
        /// <param name="path"></param>
        /// <param name="fileName"></param>
        /// <param name="dic"></param>
        void LoadTableData<K, V>(string path, string fileName, out Dictionary<K, V> dic)
        {
            dic = new Dictionary<K, V>();//初始化泛型字典
    
            //TextAsset 文本資源
            TextAsset textAsset = null;
    
            textAsset = Resources.Load(path + fileName, typeof(TextAsset)) as TextAsset;
    
            if (textAsset == null)
            {
                Util.ThrowError("XTableManager::LoadTableData file is failed! The name is " + fileName);
                return;
            }
            dic = JsonConvert.DeserializeObject<Dictionary<K, V>>(textAsset.text);//解析json文件的核心代碼
        }
        #endregion
    
    
        /// <summary>
        /// 根據id來查找字典中的物品信息的,然后返回這個物品
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
     public ItemData GetItemData(int id)
        {
            if (ItemData != null && ItemData.ContainsKey(id))
            {
                return ItemData[id];
            }
            return null;
        }

    我們繼續看啊!看UIManager管理類吧!它是干嘛的呢?而由它牽連出來的類有多少呢?我們繼續往下看。。。

    這里寫圖片描述

    看見了吧!整個框架的核心管理類哦!最重要的呢!看這個之前呢!,我們先來看一下它的延伸出來的類啊!

    這里寫圖片描述

    看見了吧!由它牽扯出來的就有7個類呢!不要看著復雜,任務,背包,戰斗,技能,商城,設置六大模塊分別有一個獨立的類,由于它們是顯示層嘛!這幾個腳本當然得掛在他們自己身上了哦!

    本篇小結:這篇主要介紹了一些工具類和讀表類的方法,最后講了一點核心類,不過還沒有正式講哦!不要著急哦!我們繼續往下篇博客看哦!

    版權聲明:本文為qq_37601496原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/qq_37601496/article/details/79269631

    智能推薦

    Easy UI框架

    這里只是初步了解 文中括號內容是復習時提醒自己的 1.下載EasyUi (放在了c/professionalapp/easyUi里,里面有個EasyUi,是課程中用到的,直接復制就行) 把所需easyUi資源復制粘貼到新建的web工程下的WEB-INF目錄下 layout控件 webRoot下新建一個jsp頁面layout.jsp 1.在head里進行引入 引入時要注意順序 body里寫 運行一下...

    【GFFrameWork】UI框架

    前言 曾經的老大說過,游戲開發70%跟UI打交道,貌似也是,UI是游戲開發里面的大頭,這么說一個不錯的UI框架就比較重要,UI界面會比較多,大項目大幾十個系統界面,管理不當會造成比較大的麻煩。之前NGUI項目界面層級通過Depth管理界面的顯示層級,Depth越大就顯示在前面,后來UGUI通過設置SetSiblingIndex,值越大越顯示在前面。有時候我們有需求某些界面固定顯示在最上面,例如引導...

    UI框架學習筆記

          本文是根據學習SiKi學院上的UI框架總結得來的,僅僅是作為學習過程的記錄,便于以后回顧。首先看下UI框架總體的設計思路:       一.UIPanelType:枚舉類型,為了存儲UI界面有哪幾種類型。      &...

    TTUIFramework ui框架

    參考鏈接 由三個腳本組成 TTUIBind,TTUIPage,TTUIRoot TTUIBind TTUIPage TTUIRoot 調用案例: 把UI做好后做成預制體放在Resources/UI路徑下 直接調用 TTUIPage.ShowPage< MyTestUI >(); 下面的方法是在MyTestUI 界面打開后執行的方法 ui腳本...

    UI框架_轉載修改

    第一次寫博客,感覺好激動啊,哈哈哈。前些天博主在蠻牛社區看到一位博主自己寫的UI框架,感覺太好了,然后就下載了下來。自己摸索了一段時間,按著那位博主的想法,自己實現了一下。然而那套框架完整版需要花幾百塊的大洋,對于博主這樣的鄉下人,太貴、買不起,哈哈。我就按著那個簡易版的實現了一下,里面的Json配置加載文件,那位博主給的例子里面沒有,我就按著他給的文章敲了一遍。然后博主又多加了一種用XML的配置...

    猜你喜歡

    【前端UI框架】

    目錄 前言 Angular Vue React 總結 前言 |??ω?` ) 喲,大家好, 因為最近要學EasyUI了,所以去找了一些有關EasyUI的信息。 這里先簡單介紹下:EasyUI是一組基于jQuery的UI插件集合體 對,這個EasyUi是基于jQuery的嘛,jQuery我們也是挺清楚的啊,一個javaScript的庫. 2005年8月,John Resig提議改進Pro...

    HTML中常用操作關于:頁面跳轉,空格

    1.頁面跳轉 2.空格的代替符...

    freemarker + ItextRender 根據模板生成PDF文件

    1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...

    電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!

    Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...

    requests實現全自動PPT模板

    http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...

    精品国产乱码久久久久久蜜桃不卡