CococsCreator 常用UI組件(Canvas、Widget、Button、Layout、EditBox、RichText、ScrollView)(第十三篇)

一、Canvas組件

這個Canvas組件在前面篇章有講過的。
在這裏插入圖片描述

屬性 說明
Design Resolution 設計分辨率(內容生產者在製作場景時使用的分辨率藍本)
Fit Height 適配高度(設計分辨率的高度自動撐滿屏幕高度)
Fit Width 適配寬度(設計分辨率的寬度自動撐滿屏幕寬度)

二、Widget 組件

在這裏插入圖片描述

屬性 說明
Top 對齊上邊界
Bottom 對齊下邊界
Left 對齊左邊界
Right 對齊右邊界
HorizontalCenter 水平方向居中
VerticalCenter 豎直方向居中
Target 對齊目標
Align Mode 指定 widget 的對齊方式,用於決定運行時 widget 應何時更新 通常設置爲 ON_WINDOWS_RESIZE,僅在初始化和每當窗口大小改變時重新對齊。設置爲 ONCE 時,僅在組件初始化時進行一次對齊。設置爲 ALWAYS 時,每幀都會對當前 Widget 組件執行對齊邏輯。

三、Button組件

Button 組件可以響應用戶的點擊操作,當用戶點擊 Button 時,Button 自身會有狀態變化。另外,Button 還可以讓用戶在完成點擊操作後響應一個自定義的行爲。
在這裏插入圖片描述

屬性 說明
Target Node 類型,當 Button 發生 Transition 的時候,會相應地修改 Target 節點的 SpriteFrame,顏色或者 Scale。
interactable 布爾類型,設爲 false 時,則 Button 組件進入禁用狀態。
Enable Auto Gray Effect 布爾類型,當設置爲 true 的時候,如果 button 的 interactable 屬性爲 false,則 button 的 sprite Target 會變爲灰度。
Transition 枚舉類型,包括 NONE、COLOR、SPRITE 和 SCALE。每種類型對應不同的 Transition 設置。
Click Event 列表類型,默認爲空,用戶添加的每一個事件由節點引用、組件名稱和一個響應函數組成。詳情見下方**`的 Button 事件 部分。

Button 點擊事件

Button 可以額外添加 Click 事件,用於響應玩家的點擊操作。有兩種方法:一種是編輯器直接關聯,要麼就是代碼添加。
編輯器綁定:

  1. Target 帶有腳本組件的節點。
  2. Component 腳本組件名稱。
  3. Handler 指定一個回調函數,當用戶點擊 Button 時會觸發此函數。
  4. CustomEventData 用戶指定任意的字符串作爲事件回調的最後一個參數傳入。
    代碼添加統一在下面舉例講解;

四、Layout 組件

Layout 是一種容器組件,容器能夠開啓自動佈局功能,自動按照規範排列所有子物體,方便用戶製作列表、翻頁等功能。
在這裏插入圖片描述

屬性 說明
Type 佈局類型,支持 NONE, HORIZONTAL,VERTICAL 和 GRID。
Resize Mode 縮放模式,支持 NONE,CHILDREN 和 CONTAINER。
Padding Left 排版時,子物體相對於容器左邊框的距離。
Padding Right 排版時,子物體相對於容器右邊框的距離。
Padding Top 排版時,子物體相對於容器上邊框的距離。
Padding Bottom 排版時,子物體相對於容器下邊框的距離。
Spacing X 水平排版時,子物體與子物體在水平方向上的間距。NONE 模式無此屬性。
Spacing Y 垂直排版時,子物體與子物體在垂直方向上的間距。NONE 模式無此屬性。
Horizontal Direction 指定水平排版時,第一個子節點從容器的左邊還是右邊開始佈局。當容器爲 Grid 類型時,此屬性和 Start Axis 屬性一起決定 Grid 佈局元素的起始水平排列方向。
Vertical Direction 指定垂直排版時,第一個子節點從容器的上面還是下面開始佈局。當容器爲 Grid 類型時,此屬性和 Start Axis 屬性一起決定 Grid 佈局元素的起始垂直排列方向。
Cell Size 此屬性只在 Grid 佈局、Children 縮放模式時存在,指定網格容器裏面排版元素的大小。
Start Axis 此屬性只在 Grid 佈局時存在,指定網格容器裏面元素排版指定的起始方向軸。
Affected By Scale 子節點的縮放是否影響佈局。

五、EditBox 組件

EditBox 是一種文本輸入組件,該組件讓你可以輕鬆獲取用戶輸入的文本。
在這裏插入圖片描述

屬性 說明
String 輸入框的初始輸入內容,如果爲空則會顯示佔位符的文本
Placeholder 輸入框佔位符的文本內容
Background 輸入框背景節點上掛載的 Sprite 組件對象
Text Label 輸入框輸入文本節點上掛載的 Label 組件對象
Placeholder Label 輸入框佔位符節點上掛載的 Label 組件對象
KeyboardReturnType 指定移動設備上面回車按鈕的樣式
Input Flag 指定輸入標識:可以指定輸入方式爲密碼或者單詞首字母大寫(僅支持 Android 平臺)
Input Mode 指定輸入模式: ANY 表示多行輸入,其它都是單行輸入,移動平臺上還可以指定鍵盤樣式。
Max Length 輸入框最大允許輸入的字符個數
Tab Index 修改 DOM 輸入元素的 tabIndex,這個屬性只有在 Web 上面修改有意義。
Editing Did Began 開始編輯文本輸入框觸發的事件回調,詳情請參考下方的 Editing Did Began 事件。
Text Changed 編輯文本輸入框時觸發的事件回調,詳情請參考下方的 Text Changed 事件。
Editing Did Ended 結束編輯文本輸入框時觸發的事件回調,詳情請參考下方的 Editing Did Ended 事件。
Editing Return 當用戶按下回車按鍵時的事件回調,目前不支持 windows 平臺,詳情請參考下方的 Editing Return 事件。

EditBox 事件:

  1. Editing Did Began 事件:在用戶點擊輸入框獲取焦點的時候被觸發
  2. Text Changed 事件:在用戶每一次輸入文字變化的時候被觸發
  3. Editing Did Ended 事件:在單行模式下面,一般是在用戶按下回車或者點擊屏幕輸入框以外的地方調用該函數。 如果是多行輸入,一般是在用戶點擊屏幕輸入框以外的地方調用該函數
  4. Editing Return 事件:在用戶按下回車鍵或者在移動端上點擊軟鍵盤的完成按鈕時,該事件會被觸發。如果是單行輸入框,按回車鍵還會使輸入框失去焦點。

EditBox 事件一樣可以編輯器綁定事件,也可以代碼添加事件,基本的操作後面統一介紹。


六、RichText 組件

RichText 組件用來顯示一段帶有不同樣式效果的文字,你可以通過一些簡單的 BBCode 標籤來設置文字的樣式。 目前支持的樣式有:顏色(color)、字體大小(size)、字體描邊(outline)、加粗(b)、斜體(i)、下劃線(u)、換行(br)、圖片(img)和點擊事件(on),並且不同的 BBCode 標籤是可以支持相互嵌套的。
在這裏插入圖片描述

屬性 說明
String 富文本的內容字符串, 你可以在裏面使用 BBCode 來指定特定文本的樣式
Horizontal Align 水平對齊方式
Font Size 字體大小, 單位是 point (注意,該字段不會影響 BBCode 裏面設置的字體大小)
Font 富文本定製字體,所有的 label 片斷都會使用這個定製的 TTF 字體
Font Family 富文本定製系統字體。
Use System Font 是否使用系統字體。
Max Width 富文本的最大寬度, 傳 0 的話意味着必須手動換行.
Line Height 字體行高, 單位是 point
Image Atlas 對於 img 標籤裏面的 src 屬性名稱,都需要在 imageAtlas 裏面找到一個有效的 spriteFrame,否則 img tag 會判定爲無效。
Handle Touch Event 選中此選項後,RichText 將阻止節點邊界框中的所有輸入事件(鼠標和觸摸),從而防止輸入事件穿透到底層節點。

七、ScrollView 組件

在這裏插入圖片描述

屬性 說明
content 它是一個節點引用,用來創建 ScrollView 的可滾動內容,通常這可能是一個包含一張巨大圖片的節點。
Horizontal 布爾值,是否允許橫向滾動。
Vertical 布爾值,是否允許縱向滾動。
Inertia 滾動的時候是否有加速度。
Brake 浮點數,滾動之後的減速係數。取值範圍是 0-1,如果是 1 則立馬停止滾動,如果是 0,則會一直滾動到 content 的邊界。
Elastic 布爾值,是否回彈。
Bounce Duration 浮點數,回彈所需要的時間。取值範圍是 0-10。
Horizontal ScrollBar 它是一個節點引用,用來創建一個滾動條來顯示 content 在水平方向上的位置。
Vertical ScrollBar 它是一個節點引用,用來創建一個滾動條來顯示 content 在垂直方向上的位置
Scroll Events 列表類型,默認爲空,用戶添加的每一個事件由節點引用,組件名稱和一個響應函數組成。詳情見下方的 Scrollview 事件。
CancelInnerEvents 如果這個屬性被設置爲 true,那麼滾動行爲會取消子節點上註冊的觸摸事件,默認被設置爲 true。

ScrollView 組件必須有指定的 content 節點才能起作用,通過指定滾動方向和 content 節點在此方向上的長度來計算滾動時的位置信息,Content 節點也可以通過 UIWidget 設置自動 resize。

ScrollView 事件

在這裏插入圖片描述


八、代碼添加回調事件響應

通過腳本添加回調有以下兩種方式:

第一種:

這種方法添加的事件回調和使用編輯器添加的事件回調是一樣的,都是通過 Button 組件實現。首先需要構造一個 cc.Component.EventHandler 對象,然後設置好對應的 target 、 component 、 handler 和 customEventData 參數。

 // here is your component file, file name = MyComponent.js 
 cc.Class({
     extends: cc.Component,
     properties: {},

	// Button事件
     onLoad: function () {
         var clickEventHandler = new cc.Component.EventHandler();
         clickEventHandler.target = this.node; // 這個 node 節點是你的事件處理代碼組件所屬的節點
         clickEventHandler.component = "MyComponent";// 這個是代碼文件名
         clickEventHandler.handler = "callback";
         clickEventHandler.customEventData = "foobar";

         var button = this.node.getComponent(cc.Button);
         button.clickEvents.push(clickEventHandler);
     },


	// 滾動條事件
   onLoad: function () {
        var scrollViewEventHandler = new cc.Component.EventHandler();
        scrollViewEventHandler.target = this.node; // 這個 node 節點是你的事件處理代碼組件所屬的節點
        scrollViewEventHandler.component = "MyComponent";// 這個是代碼文件名
        scrollViewEventHandler.handler = "callback";
        scrollViewEventHandler.customEventData = "foobar";

        var scrollview = node.getComponent(cc.ScrollView);
        scrollview.scrollEvents.push(scrollViewEventHandler);
    },

     callback: function (event, customEventData) {
         // 這裏 event 是一個 Event 對象,你可以通過 event.target 取到事件的發送節點
         var node = event.target;
         var button = node.getComponent(cc.Button);
         // 這裏的 customEventData 參數就等於你之前設置的 "foobar"
     }
 });

第二種

通過 button.node.on(‘click’, …) 的方式來添加,這是一種非常簡便的方式,但是該方式有一定的侷限性,在事件回調裏面無法 獲得當前點擊按鈕的屏幕座標點。

 cc.Class({
     extends: cc.Component,

     properties: {
         button: cc.Button,
         scrollview: cc.ScrollView
     },
     onLoad: function () {
         this.button.node.on('click', this.callback, this);
         this.scrollview.node.on('scroll-to-top', this.callback, this);
     },

     callback: function (button) {
         // 另外,注意這種方式註冊的事件,也無法傳遞 customEventData
     }
 });
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章