LayaAir UI 元件 # Clip 切片、ComboBox 下拉框
目錄
Clip 切片
1、Laya.ui.Clip 元件可用於顯示點陣圖切片動畫,Clip 可以將一張圖片,按橫向分隔數量 clipX、豎向分隔數量 clipY,或橫向分割每個切片的寬度 clipWidth、豎向分割每個切片的高度 clipHeight,從左向右,從上到下,分割組合為一個切片動畫。
2、Clip 元件可以用來播放切片動畫,和顯示切片動畫的某一幀圖片。
3、LayaAir 對於以 clip 字首命令的資源自動識別為 Clip 元件。
Package | laya.ui |
類 | public class Clip |
Inheritance | Clip Component Sprite Node EventDispatcher Object |
子類 | FontClip |
4、Image 和 Clip 元件是唯一支援非同步載入的兩個元件,比如clip.skin = "abc/xxx.png",其他UI元件均不支援非同步載入。
Property(屬性) |
---|
autoPlay : Boolean ,表示是否自動播放動畫,若自動播放值為true,否則值為false; 可控制切片動畫的播放、停止。 |
clipHeight : Number ,豎向分割時每個切片的高度,與 clipY 同時設定時優先順序高於 clipY |
clipWidth : Number ,橫向分割時每個切片的寬度,與 clipX 同時設定時優先順序高於 clipX 。 |
clipX : int ,X軸(橫向)切片數量。 |
clipY : int ,Y軸(豎向)切片數量。 |
height : Number ,[override] 表示顯示物件的高度,以畫素為單位。 注:當值為0時,高度為自適應大小。 |
index : int ,當前幀索引。 |
interval : int ,表示動畫播放間隔時間(以毫秒為單位)。 |
isPlaying : Boolean ,表示動畫的當前播放狀態。 如果動畫正在播放中,則為true,否則為flash。 |
skin : String 物件的面板地址,以字串表示。 如果資源未載入,則先載入資源,載入完成後應用於此物件。 注意:資源載入完成後,會自動快取至資源庫中。 |
total : int ,[read-only] 切片動畫的總幀數。 |
width : Number ,[override] 表示顯示物件的寬度,以畫素為單位。 注:當值為0時,寬度為自適應大小。 |
Method(方法) |
---|
Clip(url:String = null, clipX:int = 1, clipY:int = 1) ,建立一個新的 Clip 示例。 |
destroy(destroyChild:Boolean = true):void [override] 銷燬此物件。destroy物件預設會把自己從父節點移除,並且清理自身引用關係,等待js自動垃圾回收機制回收。destroy後不能再使用。 destroy時會移除自身的事情監聽,自身的timer監聽,移除子物件及從父節點移除自己。 |
dispose():void ,銷燬物件並釋放載入的面板資源。 |
play():void ,播放動畫。 |
stop():void ,停止動畫。 |
更多 API 可以參考官網:https://layaair.ldc.layabox.com/api/?category=UI&class=laya.ui.Clip
預設Clip 資源
1、現在就以使用預設提供的 clip_num.png 為例進行操作。
//初始化引擎,設定寬高並開啟WebGL渲染模式
Laya.init(600, 400, Laya.WebGL);
var atlas_comp = "res/atlas/comp.atlas";//atlas_comp:系統預設圖集資源
var skin_clip_num = "comp/clip_num.png";//skin_clip_num:系統預設提供的切片元件
var clip_num;//clip_num:切片元件物件
//載入圖整合功後,執行onLoad回撥方法
Laya.loader.load(atlas_comp, Laya.Handler.create(this, onLoaded));
function onLoaded() {
//建立一個新的Clip例項;clipX x方向分割個數、clipY y方向分割個數
clip_num = new Laya.Clip(skin_clip_num, 10, 1);
// clip_num.autoPlay = true;//autoPlay屬性獲取或者設定是否自動播放
clip_num.interval = 1000;//設定動畫播放間隔時間(以毫秒為單位)
clip_num.pos(30, 10);//設定物件顯示的位置
Laya.stage.addChild(clip_num);//新增到舞臺顯示
addButton();
}
var clip_index = 0;//clip_index:切片動畫當前播放的幀索引(從0開始)
//新增一個操作按鈕
function addButton() {
//建立一個按鈕例項
var button = new Laya.Button("comp/button.png", clip_num.isPlaying?"暫 停":"播 放");
button.labelSize = 20;//按鈕文字字型大小
button.pos(200, 10);//按鈕元件顯示的位置
Laya.stage.addChild(button);//新增到舞臺顯示
button.on(Laya.Event.CLICK, this, function () {//為按鈕繫結單擊事件
if (clip_num.isPlaying) {//當切片動畫在播放時
clip_num.stop();//停止切片動畫
clip_index = clip_num.index;//獲取切片動畫當前幀索引,從1開始
button.label = "播 放";//改變按鈕顯示的文字
} else {
clip_num.play();//設定當前幀索引clip_num.index必須是在 play 方法後
clip_num.index = clip_index;//設定切片動畫開始播放的幀索引,否則 play 預設從第0幀開始播放
button.label = "暫 停";
}
});
}
自定義Clip 資源
1、如上所示 clip_countDown.png 是自己用 PS 所繪製,尺寸沒有強制要求,注意的是應該進行等分。
//初始化引擎,設定寬高並開啟WebGL渲染模式
Laya.init(1080, 1920, Laya.WebGL);
Laya.stage.bgColor = "#252525";
var skin_clip_num = "ui/clip_countDown.png";//skin_clip_num:自定義的切片元件
var clip_num;//clip_num:切片元件物件
//資源載入成功後,執行 onLoad 回撥方法
Laya.loader.load(skin_clip_num, Laya.Handler.create(this, onLoaded));
function onLoaded() {
//建立一個新的Clip例項;x方向分割10個、y方向分割1個
clip_num = new Laya.Clip(skin_clip_num, 10, 1);
clip_num.size(50,50);//設定切片動畫物件的尺寸大小
// clip_num.autoPlay = true;//autoPlay屬性獲取或者設定是否自動播放
clip_num.interval = 1000;//設定動畫播放間隔時間(以毫秒為單位)
clip_num.pos(30, 10);//設定物件顯示的位置
Laya.stage.addChild(clip_num);//新增到舞臺顯示
}
//使用系統自帶的按鈕面板,先載入圖集
Laya.loader.load("res/atlas/comp.atlas",Laya.Handler.create(this,addButton));
var clip_index = 0;//clip_index:切片動畫當前播放的幀索引(從0開始)
//新增一個操作按鈕
function addButton() {
//建立一個按鈕例項,系統預設按鈕元件面板
var button = new Laya.Button("comp/button.png", clip_num.isPlaying?"暫 停":"播 放");
button.labelSize = 20;//按鈕文字字型大小
button.pos(200, 10);//按鈕元件顯示的位置
Laya.stage.addChild(button);//新增到舞臺顯示
button.on(Laya.Event.CLICK, this, function () {//為按鈕繫結單擊事件
if (clip_num.isPlaying) {//當切片動畫在播放時
Laya.SoundManager.stopMusic();//停止背景音樂
clip_num.stop();//停止切片動畫
clip_index = clip_num.index;//獲取切片動畫當前幀索引,從1開始
button.label = "播 放";//改變按鈕顯示的文字
} else {
Laya.SoundManager.playMusic("http://img02.tuke88.com/preview_music/00/08/56/preview-5b835eaf13a9b9053.mp3");//播放一個背景音樂
clip_num.play();//設定當前幀索引clip_num.index必須是在 play 方法後
clip_num.index = clip_index;//設定切片動畫開始播放的幀索引,否則 play 預設從第0幀開始播放
button.label = "暫 停";
}
});
}
更多內容可以參考官網:https://ldc.layabox.com/doc/?nav=zh-js-2-3-3
ComboBox
Package | laya.ui |
類 | public class ComboBox |
Inheritance | ComboBox Component Sprite Node EventDispatcher Object |
1、laya.ui.ComboBox 元件包含一個下拉列表,使用者可以從該列表中選擇單個值。
2、以 combobox_ 或者 combo_字首命名的元件自動識別為 下拉框 comboBox 元件。系統預設提供的下拉框元件如下圖所示,combobox.png 其實和 button.png 元件很像。
Property(屬性) |
---|
height : Number ,[override] 表示顯示物件的高度,以畫素為單位。 注:當值為0時,高度為自適應大小。 |
isOpen : Boolean ,表示下拉列表的開啟狀態。 |
itemColors : String ,下拉列表項顏色。 格式:"懸停或被選中時背景顏色,懸停或被選中時標籤顏色,標籤顏色,邊框顏色,背景顏色" |
itemSize : int ,下拉列表項標籤的字型大小。 |
labelBold : Boolean ,表示按鈕文字標籤是否為粗體字。(按鈕表示未下拉時的按鈕) |
labels : String ,標籤集合字串。也可以通過構造器直接設定 |
labelSize : int ,獲取或設定對 ComboBox 元件所包含的 Button 元件的標籤字型大小。 |
selectedIndex : int ,表示選擇的下拉列表項的索引。從0開始 |
selectedLabel : String ,表示選擇的下拉列表項的的標籤。 |
selectHandler : Handler ,改變下拉列表的選擇項時執行的處理器(預設返回引數index:int)。 |
skin : String ,物件的面板資源地址。 支援單態,兩態和三態,用 stateNum 屬性設定 物件的面板地址,以字串表示。 |
stateNum : int ,表示按鈕的狀態值。 |
visibleNum : int ,獲取或設定沒有滾動條的下拉列表中可顯示的最大行數。 |
width : Number ,[override] 表示顯示物件的寬度,以畫素為單位。 注:當值為0時,寬度為自適應大小。 |
更多 API 可以參考官網:https://layaair.ldc.layabox.com/api/?category=UI&class=laya.ui.ComboBox
編碼示例
1、這裡直接使用引擎預設提供的 combobox.png 資源,並把它單獨拷貝到新建的 bin/ui 目錄下了。如果自己想重新 PS 一張,則和 "自定義按鈕資源' 同理,不再累述。
(function () {
//combobox.png:系統預設提供的下拉框資源,從 laya/assets/comp 下複製一份到 bin/ui 目錄下
var skin = "ui/combobox.png";
Laya.init(1080, 1920, Laya.WebGL);//初始化引擎,不支援WebGL時自動切換至Canvas
Laya.stage.bgColor = "#fff";
var text_info;
//下拉框面板載入完成後執行回撥函式
Laya.loader.load(skin, Laya.Handler.create(this, onLoadComplete));
function onLoadComplete() {
/**
* 第一個引數:下拉框面板地址
* 第二個引數:下拉列表的標籤集字串。以逗號做分割,如"item0,item1,item2,item3,item4,item5"
*/
var comboBox = new Laya.ComboBox(skin, "Java,Android,LayaAir,Vue,React,RocketMQ");
comboBox.labelSize = 25;//獲取或設定 ComboBox 元件包含的 Button 元件的標籤字型大小,即選中後顯示的文字大小
comboBox.itemSize = 20;//獲取和設定下拉列表項標籤的字型大小
comboBox.size(150, 30);//下拉框按鈕的大小,應該根據內容文字長度和大小進行合理設定,確保能包含最長的選項
comboBox.pos(30, 10);//下拉框元件的位置
Laya.stage.addChild(comboBox);//新增到舞臺顯示
/**
* selectHandler:改變下拉列表的選擇項時執行的處理器(預設返回引數index:int)
*/
comboBox.selectHandler = new Laya.Handler(this, function (cb) {
text_info.text = "選中: " + cb.selectedIndex + "=" + cb.selectedLabel;
}, [comboBox]);
showText();
}
//顯示一段文字
function showText(){
text_info = new Laya.Text();
text_info.text = "選中項";
text_info.fontSize = 20;
text_info.pos(230,20);
Laya.stage.addChild(text_info);
}
})();
官網地址:https://ldc.layabox.com/doc/?nav=zh-js-2-3-4