Laya 核心API

一級類圖

  • Config3D
  • Config 全局參數(shù)悯辙。如需更改劣领,請在初始化引擎之前設置
  • UIConfig
  • Laya3D
  • Laya
  • EventDispatcher 可調度事件基類
    • Resource
    • SoundChannel
    • Sound
    • HttpRequest
    • Loader
    • LoaderManager
    • AnimationTransform3D
    • Transform3D
    • BaseRender
    • Texture
    • Node
      • UIComponent
    • AnimationPlayer
    • Accelerator
    • Shake
    • Gyroscope
    • Socket
    • Physics
    • TimeLine
  • Component 組件基類
    • ConstraintComponent
    • CannonPhysicsComponent
    • PhysicsComponent
    • Script3D
    • Animator
    • CommonScript
    • Script
    • EffectBase
    • RigidBody
    • JointBase
    • ColliderBase
    • Widget
  • Browser

1. 顯示相關

1.1 節(jié)點 Node

Node節(jié)點類:

  • 是可以放在顯示列表中的所有對象的基類
  • 顯示列表管理Laya運行時顯示的所有對象
  • 可以排列顯示列表中的顯示對象
  • 對象可以有子顯示對象

常用Node操作:

    1. 節(jié)點操作
      • addChild
      • destroy
      • getChildAt
      • getComponent
      • replaceChild
    1. 生命周期
    • onAwake() 組件被激活后執(zhí)行穿香,此時所有節(jié)點和組件均已創(chuàng)建完畢国觉,此方法只會執(zhí)行一次嚼松。
    • onDestroy() 組件被銷毀時執(zhí)行
    • onDisable() 組件被禁用時執(zhí)行猾普,比如節(jié)點從舞臺移除后袜炕。
    • onEnable() 組件被啟用后執(zhí)行,比如節(jié)點被添加到舞臺后初家。
    1. 事件分發(fā)
    • on
    1. 定時器
    • clearTimer
    • timerOnce

繼承概覽圖:

  • Laya.Display.Node
    • Sprite 是基本的顯示圖形的顯示列表節(jié)點
      • Text 顯示文本
        • Input 輸入文本
      • Scene 場景類
        • View 視圖類偎窘,相對布局
          • Dialog對話框
      • Scene3D 3D場景類
      • AnimationBase 動畫基類
        • FrameAnimation 節(jié)點關鍵幀動畫播放類
          • EffectAnimation 動效模板
        • Animation 是Graphics動畫類
      • Stage 舞臺類 通過 Laya.stage 單例訪問
      • Skeleton 骨骼動畫
      • MovieClip 播放swf動畫
      • Video Video將視頻顯示到Canvas上
      • HTMLDivElement HTML圖文類
      • TileAniSprite TildMap的動畫顯示對象
      • MapLayer 層級類
      • GridSprite
      • Particle2D 粒子播放類
      • PhysicsDebugDraw 物理輔助線
      • UIComponent ui控件類的基類
        • Image
        • Box 控件容器類
          • List
          • UIGroup
          • ViewStack
          • ScaleBox
          • Panel
          • Tree
          • LayoutBox
        • Button
        • Clip
        • ColorPicker
        • Label
        • Slider
        • ScrollBar
        • ComboBox
        • ProgressBar
        • TipManager
        • WXOpenDataViewer
      • DialogManager 對話框管理容器,所有的對話框都在該容器內(nèi)
    • Sprite3D
      • ReflectionProbe
      • RenderableSprite3D 可渲染3D精靈的父類
        • MeshSprite3D 網(wǎng)格
        • SkinnedMeshSprite3D
        • PixelLineSprite3D 像素線渲染精靈
        • ShuriKenParticle3D 3D粒子
        • TrailSprite3D
        • SimpleSkinnedMeshSprite3D
      • LightSprite 燈光
        • PointLight 點光
        • SpotLight 聚光
        • DirectionLight 平行光
      • BaseCamera
        • Camera攝像機

1.2 場景

舞臺 Stage

舞臺類溜在,顯示列表的根節(jié)點陌知,所有顯示對象都在舞臺上顯示

功能:

  1. 展示相關,長寬
  2. 外設相關 鼠標相關

場景 Scene

負責場景創(chuàng)建掖肋,加載仆葡,銷毀等功能 場景被從節(jié)點移除。

作用:

  1. load() 加載場景及場景使用到的資源
  2. open() 加載并打開場景
  3. close() 根據(jù)地址志笼,關閉場景(包括對話框)
  4. closeAll() 關閉所有場景沿盅,不包括對話框,如果關閉對話框纫溃,請使用Dialog.closeAll()腰涧。
  5. destroy() 根據(jù)地址,銷毀場景(包括對話框)
  6. gc() 銷毀當前沒有被使用的資源,該函數(shù)會忽略lock=true的資源紊浩。
  7. setLoadingPage() 設置loading界面窖铡,引擎會在調用open方法后,延遲打開loading界面坊谁,在頁面添加到舞臺之后费彼,關閉loading界面。
  8. showLoadingPage() 顯示loading界面
  9. hideLoadingPage() 隱藏loading界面

子類:

  • View
    • 視圖類 增加相對布局功能
  • Dialog
    • 彈出對話框
    • Handler 事件處理器類呜袁〉新颍可以處理close事件

生命周期:

  • onOpened 場景打開完成后,調用此方法
  • onClosed 關閉完成后阶界,調用此方法

1.3 元素

精靈 Sprite

游戲中Sprite精靈是在屏幕中能夠被控制的顯示對象虹钮,如果屏幕中的顯示對象不能被控制那就只是一個節(jié)點聋庵。準確來說,Sprite精靈是一個能夠通過改變自身屬性芙粱,比如角度祭玉、位置、伸縮春畔、顏色等脱货,變?yōu)榭煽貏赢嫷?D圖像

作用:

  • 展示寬高 getBounds
    • 獲取寬高,也可以設置
  • 鼠標事件 mouseEnabled
    • 默認不接受鼠標事件律姨,即mouseEnabled=false
  • 可做容器
  • 常用的視圖操作(大小 位置 縮放 紋理圖片 拖拽)

1.4 視圖組件

UIComponent

所有視圖組件直接或間接地繼承自Component類振峻,Component類是UI組件的基類。每個組件都擁有屬于自己的屬性择份、方法和事件扣孟。使用組件可以使程序設計與界面設計分離,以提高代碼的可復用性荣赶。

分類:基礎組件凤价、容器組件、視圖組件

繼承關系:

  • UIComponent
    • Image
      • AdvImage 廣告插件
    • Box
      • List 控件可顯示項目列表拔创。默認為垂直方向列表利诺。
      • UIGroup 以自動布局的項集合控件
        • RadioGroup 控件定義一組 Radio 控件,這些控件相互排斥剩燥; 因此慢逾,用戶每次只能選擇一個 Radio 控件。
        • Tab 組件用來定義選項卡按鈕組灭红。
      • ViewStack 視圖堆棧類
      • ScaleBox 自適應縮放容器吱型,容器設置大小后拓哺,容器大小始終保持stage大小
      • Panel 面板容器類
      • Tree 使用戶可以查看排列為可擴展樹的層次結構數(shù)據(jù)
      • LayoutBox 布局容器類
        • HBox 水平布局容器類
        • VBox
    • Button
      • CheckBox 組件顯示一個小方框校读,該方框內(nèi)可以有選中標記
      • Radio 控件使用戶可在一組互相排斥的選擇中做出一種選擇
    • Clip 位圖切片動畫
      • FontClip 字體切片账月,簡化版的位圖字體
    • ColorPicker 組件將顯示包含多個顏色樣本的列表,用戶可以從中選擇顏色赁项。
    • Label 顯示文本
      • TextInput 顯示和輸入文本
    • Slider 用戶可以通過在滑塊軌道的終點之間移動滑塊來選擇值
      • HSlider 水平方向
      • VSlider 垂直
    • ScrollBar 滾動條組件
      • VScrollBar
      • HScrollBar
    • ComboBox 下拉列表葛躏,用戶可以從該列表中選擇單個值
    • ProgressBar 加載進度
    • TipManager 鼠標提示管理類
    • WXOpenDataViewer 微信開放數(shù)據(jù)展示組件,直接實例本組件

2. 腳本組件

核心類概覽:

  • Component
    • ConstraintComponent 約束組件的父類
      • FixedConstraint
      • ConfigurableConstraint
    • CannonPhysicsComponent 創(chuàng)建物理組件的父類
      • PhysicsTriggerComponent 物理觸發(fā)器組件
    • PhysicsComponent
      • CharacterController 角色控制器
      • PhysicsTriggerComponent 物理觸發(fā)器組件
        • Rigidbody3D 剛體碰撞器
        • PhysicsCollider 靜態(tài)物理碰撞器
    • Script3D 3D腳本的父類,該類為抽象類,不允許實例
    • Animator 動畫組件
    • CommonScript 公共腳本類
    • Script 組件的生命周期, 抽象類悠菜,不允許實例
    • EffectBase 插件基類舰攒,基于對象池管理
      • FadeIn 淡入效果
      • FadeOut
    • RigidBody 2D剛體
    • JointBase 關節(jié)基類
      • DistanceJoint 距離關節(jié)
      • GearJoint 齒輪關節(jié)
      • MotorJoint 馬達關節(jié):用來限制兩個剛體,使其相對位置和角度保持不變
      • MouseJoint
      • PrismaticJoint
      • PulleyJoint
      • RevoluteJoint
      • RopeJoint
      • WeldJoint
      • WheelJoint
    • ColliderBase
      • ChainCollider 2D線形碰撞體
      • CircleCollider 2D圓形碰撞體
      • PolygonCollider 2D多邊形碰撞體
      • BoxCollider 2D矩形碰撞體
    • Widget 相對布局插件

2.1 腳本處理 Script

掛腳本的原則

  • 腳本要控制哪個節(jié)點悔醋,就掛在哪個節(jié)點上摩窃。
  • 如果是全局的管理類,一般都會掛到根節(jié)點上。

生命周期:

  • onAwake() 組件被激活后執(zhí)行猾愿,此時所有節(jié)點和組件均已創(chuàng)建完畢鹦聪,此方法只執(zhí)行一次。
  • onEnable() 組件被啟用后執(zhí)行蒂秘,比如節(jié)點被添加到舞臺后泽本。
  • onStart() 第一次執(zhí)行update之前執(zhí)行,只會執(zhí)行一次姻僧。
  • onTriggerEnter(other:any,self:any,contact:any) 開始碰撞時執(zhí)行
  • onTriggerStay(other:any,self:any,contact:any) 持續(xù)碰撞時執(zhí)行
  • onTriggerExit(other:any,self:any,contact:any) 結束碰撞時執(zhí)行
  • onMouseDown(e:laya.events.Event) 鼠標按下時執(zhí)行
  • onMouseUp(e:laya.events.Event) 鼠標抬起時執(zhí)行
  • onClick(e:laya.events.Event) 鼠標點擊時執(zhí)行
  • onStageMouseDown(e:laya.events.Event) 鼠標在舞臺按下時執(zhí)行
  • onStageMouseUp(e:laya.events.Event) 鼠標在舞臺抬起時執(zhí)行
  • onStageClick(e:laya.events.Event) 鼠標在舞臺點擊時執(zhí)行
  • onStageMouseMove(e:laya.events.Event) 鼠標在舞臺移動時執(zhí)行
  • onDoubleClick(e:laya.events.Event) 鼠標雙擊時執(zhí)行
  • onRightClick(e:laya.events.Event) 鼠標右鍵點擊時執(zhí)行
  • onMouseMove(e:laya.events.Event) 鼠標移動時執(zhí)行
  • onMouseOver(e:laya.events.Event) 鼠標經(jīng)過節(jié)點時觸發(fā)
  • onMouseOut(e:laya.events.Event) 鼠標離開節(jié)點時觸發(fā)
  • onKeyDown(e:laya.events.Event) 鍵盤按下時執(zhí)行
  • onKeyPress(e:laya.events.Event) 鍵盤產(chǎn)生一個字符時執(zhí)行
  • onKeyUp(e:laya.events.Event) 鍵盤抬起時執(zhí)行
  • onUpdate() 每幀更新時執(zhí)行规丽,盡量不要在這里寫大循環(huán)邏輯或者使用getComponent方法

![][componentlifecycle]

2.2 碰撞

1. 基本概念

  1. 鋼體 rigidbody: 在運動中和受力作用后,形狀和大小不變撇贺,而且內(nèi)部各點的相對位置不變的物體赌莺。
  2. 碰撞體 collider:碰撞體是給物體加一個判定框,當碰撞框重疊的時候松嘶,兩物體發(fā)生碰撞雄嚣。
  3. 關節(jié)joint: 關節(jié)可以對兩個或多個物體進行一種約束。

剛體屬性:

  1. isKinematic是否為運動剛體
  2. mass質量
  3. gravity 重力
  4. angularVelocity 角速度
  5. angularDamping 角阻尼
  6. linearVelocity 線性速度
  7. linearDamping 線性阻尼

碰撞:

  1. 碰撞器
  • 3D碰撞器喘蟆,由碰撞器和碰撞器形狀兩部分組成。
  • 3D碰撞器根據(jù)特點的不同鼓鲁,分為靜態(tài)碰撞器蕴轨、剛體碰撞器、角色碰撞器骇吭。
  1. 觸發(fā)器 Listner

碰撞類型:

  • PhysicsCollider: 靜態(tài)碰撞器 它的特性是不受力橙弱,不會產(chǎn)生物理移動。
  • Rigidbody3D: 剛體&碰撞器
    • isKinematic=false: 默認情況下,動力學類型的剛體碰撞器,通常用動力學剛體碰撞器進行受力的交互反饋燥狰。例如棘脐,撞擊后的反彈、飛出或者倒下龙致,放在空中會受重力影響而掉落
    • isKinematic=true: 運動學類型剛體碰撞器,不受重力蛀缝、不受速度、不受其它力的影響目代,在物理世界中永遠處于靜止屈梁,只能通過transform去改變節(jié)點坐標來移動。有移動的碰撞器需求榛了,例如來回移動的跳板或障礙
  • CharacterController: 角色碰撞器,角色控制器是無法設置為觸發(fā)器的在讶。但是,角色碰撞器與觸發(fā)器進行接觸霜大,仍然可以激活觸發(fā)器的生命周期方法构哺。繼承于物理組件的父類PhysicsComponent

碰撞形狀:

  • LayaAir引擎支持8種3D碰撞形狀
    • 盒形BoxColliderShape
    • 球形SphereColliderShape
    • 圓柱形CylinderColliderShape
    • 膠囊形CapsuleColliderShape
    • 圓錐形ConeColliderShape
    • 平面形狀StaticPlaneColliderShape
    • 復合形狀CompoundColliderShape
    • 網(wǎng)格形狀MeshColliderShape
  • Unity中可導出的碰撞形狀
    • 盒形碰撞體Box collider
    • 球形碰撞體Sphere Collider
    • 膠囊形碰撞體Capsule Collider
    • 網(wǎng)格碰撞體 Mesh Collider
//使用示例
   //1. 創(chuàng)建圓錐形3D模型節(jié)點對象
  let cone = new Laya.MeshSprite3D(Laya.PrimitiveMesh.createCone(raidius, height));
  //把圓錐形3D節(jié)點對象添加到3D場景節(jié)點下
  this.newScene.addChild(cone);
  //設置隨機位置
  this.tmpVector.setValue(Math.random() * 6 - 2, 6, Math.random() * 6 - 2);
  cone.transform.position = this.tmpVector;
  //2. 為圓錐形3D節(jié)點對象創(chuàng)建剛體碰撞器
  let _rigidBody = <Laya.Rigidbody3D>(cone.addComponent(Laya.Rigidbody3D));
  //創(chuàng)建圓錐形碰撞器形狀(使用節(jié)點對象的值,保持一致性)
  let coneShape = new Laya.ConeColliderShape(raidius, height);
  //為剛體碰撞器添加碰撞器形狀
  _rigidBody.colliderShape = coneShape;

2. 生命周期方法

檢測物理碰撞的方式有兩種:

  • 碰撞事件生命周期方法
    • onCollisionEnter 剛發(fā)生物理碰撞時战坤,也就是碰撞事件生命周期內(nèi)的第一次進入碰撞曙强,自動執(zhí)行的生命周期虛方法残拐,該方法只會執(zhí)行一次。
    • onCollisionStay 持續(xù)的物理碰撞時旗扑,也就是碰撞事件生命周期內(nèi)的第二次碰撞到碰撞離開前蹦骑,自動執(zhí)行的生命周期虛方法。該方法在持續(xù)碰撞期間臀防,每幀都會執(zhí)行眠菇。
    • onCollisionExit 物理碰撞結束時,自動執(zhí)行的生命周期虛方法袱衷,該方法只會執(zhí)行一次捎废。
  • 觸發(fā)事件生命周期方法
    • onTriggerEnter 剛發(fā)生物體接觸時,也就是觸發(fā)事件生命周期內(nèi)的第一次進行接觸致燥,自動執(zhí)行的生命周期虛方法登疗,該方法只會執(zhí)行一次。
    • onTriggerStay 持續(xù)的物體接觸時嫌蚤,也就是觸發(fā)事件生命周期內(nèi)的第二次接觸到接觸離開前辐益,自動執(zhí)行的生命周期虛方法。該方法在持續(xù)接觸期間脱吱,每幀都會執(zhí)行智政。
    • onTriggerExit 物體接觸結束時,自動執(zhí)行的生命周期虛方法箱蝠,該方法只會執(zhí)行一次续捂。

碰撞事件的生命周期方法永遠不會與觸發(fā)事件的生命周期方法同時激活,只能是碰撞事件或者是觸發(fā)事件
無論是碰撞事件還是觸發(fā)事件的生命周期方法宦搬,從進入到離開的順序皆為“Enter,Stay,Stay,……,Exit”牙瓢。

3. 分組

  1. collisionGroup: 碰撞組

由于碰撞組之間的碰撞依據(jù)是位運算的按位與,按位與的計算結果非0則可以碰撞间校,為0則不可碰撞矾克。

//Physics3DUtils工具類的COLLISIONFILTERGROUP_ALLFILTER屬性值為-1,-1與任何2的冪值進行按位與都非0憔足,所以取該屬性值為分組時聂渊,則所有的碰撞組都可碰撞。
xxx.collisionGroup = Laya.Physics3DUtils.COLLISIONFILTERGROUP_ALLFILTER;
  1. canCollideWith: 過濾碰撞組

碰撞器的canCollideWith屬性可以用于指定與哪個組碰撞四瘫,指定哪個汉嗽,就可以與哪個碰撞。其它的都不可以碰撞找蜜,起到了過濾其它碰撞組的效果

//指定xxx碰撞器可以與其發(fā)生碰撞的碰撞組(本例只與自定義組1碰撞)
xxx.canCollideWith = Laya.Physics3DUtils.COLLISIONFILTERGROUP_CUSTOMFILTER1;

1.5相機

2D相機

把所有東西放到一個sprite下面饼暑,通過設置scrollRect來達到類似的效果

3D相機

3. 動畫

3.1 2D動畫

  • EventDispatcher
    • Node
      -Sprite
      • AnimationBase
        • FrameAnimation
        • Animation
  • Tween
  • Ease
  • Component
    • Animator

1. 圖集動畫

laya.display.Animation

  1. 圖集加載:

方法1:loadAtlas() 加載圖集
方法2:createFrames創(chuàng)建動畫模板
方法3: loadImages直接播放圖集中指定的動畫


//方法1:
this.roleAni = new Laya.Animation();
//加載動畫圖集,加載成功后執(zhí)行回調方法
this.roleAni.loadAtlas("res/atlas/role.atlas",Laya.Handler.create(this,onLoaded));
function onLoaded(){
    //添加到舞臺
    Laya.stage.addChild(this.roleAni);
}

//方法2:
this.roleAni = new Laya.Animation();
//加載動畫圖集,加載成功后執(zhí)行回調方法
this.roleAni.loadAtlas("res/atlas/role.atlas",Laya.Handler.create(this,onLoaded));
function onLoaded(){
    //添加到舞臺
    Laya.stage.addChild(this.roleAni);
    //創(chuàng)建動畫模板dizziness
    Laya.Animation.createFrames(aniUrls("die",6),"dizziness");
    //循環(huán)播放動畫
    this.roleAni.play(0,true,"dizziness");
}
/**
 * 創(chuàng)建一組動畫的url數(shù)組(美術資源地址數(shù)組)
 * aniName  動作的名稱弓叛,用于生成url
 * length   動畫最后一幀的索引值彰居,
 */    
function aniUrls(aniName,length){
    var urls = [];
    for(var i = 0;i<length;i++){
        //動畫資源路徑要和動畫圖集打包前的資源命名對應起來
        urls.push("role/"+aniName+i+".png");
    }
    return urls;
}



//方法3:
Laya.loader.load("res/atlas/role.atlas",Laya.Handler.create(this,onLoaded));
function onLoaded(){
    //創(chuàng)建動畫實例
    this.roleAni = new Laya.Animation();
    //添加到舞臺
    Laya.stage.addChild(this.roleAni);
    //通過數(shù)組加載動畫資源,然后用play方法直接播放撰筷。由于loadImages方法返回的是Animation對象本身陈惰,可以直接使用“l(fā)oadImages(...).play(...);”語法。
    this.roleAni.loadImages(aniUrls("move",6)).play();
}

2. 緩動動畫

  • tween
    • Tween 緩動類用以實現(xiàn)目標對象屬性的緩動毕籽,例如目標對象的x或y軸的緩動距離等目標值設置抬闯,以及緩動開始、停止关筒、清理等設置
  • Ease
    • 類定義了大量的緩動函數(shù)溶握,以便實現(xiàn) Tween 動畫的具體緩動效果

Tween使用:

  • from
    • from是從緩動目標點向初始位置產(chǎn)生運動(從緩動目標位置來)
      ![][from]
  • to
    • to是從初始位置向緩動目標的位置產(chǎn)生運動(到緩動目標位置去)
      ![][to]

3. 時間軸動畫

  1. 在LAYAIDEL中制作時間軸動畫,輸出文件 .ani
  2. 使用:
//1. 加載圖集成功后蒸播,執(zhí)行onLoaded回調方法
Laya.loader.load("res/atlas/ui.atlas", Laya.Handler.create(this, onLoaded));

//2. 創(chuàng)建一個Animation實例
var tl = new Laya.Animation();
//加載動畫文件
tl.loadAnimation("TimeLine.ani");

//3. 添加到舞臺
Laya.stage.addChild(tl);
//播放Animation動畫
tl.play();

4. 骨骼動畫

  • Spine骨骼動畫
    • IDE內(nèi) 生成 sk文件
    • Spine骨骼動畫適配版 skel文件
  • DragonBones骨骼動畫
  1. 在IDE中繪制骨骼動畫
  2. 使用:
//初始化舞臺
Laya.init(1334,750);
//創(chuàng)建一個Skeleton對象
var skeleton = new Laya.Skeleton();
//添加到舞臺
Laya.stage.addChild(skeleton);
skeleton.pos(600,700);
//通過加載直接創(chuàng)建動畫
skeleton.load("res/spine/spineboy/spineboy.sk");

3.2 3D動畫

LayaAir3D支持unity導出Mecanim動畫系統(tǒng)睡榆。

  1. 在Unity3D制作動畫
  2. 導出后的資源拷貝到項目 bin/res 目錄下
  3. 加載動畫
var ani= role3D.getChildAt(0).getComponent(Laya.Animator);
  1. 播放控制
//獲取精靈
var monkey = Laya.Loader.getRes("res/threeDimen/skinModel/LayaMonkey/LayaMonkey.lh");
this.scene.addChild(monkey);
//獲取角色動畫組件
var ani = monkey.getChildAt(0).getComponent(Laya.Animator);
//創(chuàng)建一個動畫動作狀態(tài)
var state1 = new Laya.AnimatorState();
//設置動作狀態(tài)的名稱
state1.name = "hello";
//設置動作狀態(tài)播放的起始時間(起始時間與結束時間的設置為0-1的百分比數(shù)值)  要截取的時間點 / 動畫的總時長
state1.clipStart = 10/40;
//設置動作狀態(tài)播放的結束時間
state1.clipEnd = 20/40;
//得到默認動畫賦值給Clip(getDefaultState默認動畫為Unity中animation的數(shù)組順序0下標的動畫)
state1.clip = ani.getDefaultState().clip;
//動畫播放是否循環(huán)
state1.clip.islooping = true;
//添加動畫狀態(tài)到動畫組件里
this.ani.addState(state1);
//播放動畫
this.ani.play("hello");

4. 資源

4.1 資源管理

  • EventDispatcher
    • Loader

Laya.Loader由LoaderManager統(tǒng)一管理,一般情況下袍榆,開發(fā)是不需要自己創(chuàng)建Loader實例胀屿。

4.2 網(wǎng)絡資源

  • EventDispatcher
    • HttpRequest
    • Socket

4.3 多媒體

聲音

  • SoundManager
  • EventDispatcher
    • Sound
    • SoundChannel

SoundManager 是一個聲音管理類。提供了對背景音樂包雀、音效的播放控制方法宿崭。 引擎默認有兩套聲音方案:WebAudio和H5Audio 播放音效,優(yōu)先使用WebAudio播放聲音馏艾,如果WebAudio不可用,則用H5Audio播放奴愉,H5Audio在部分機器上有兼容問題

視頻

  • EventDispatcher
    • Node
      • Sprite
        • Video

Video將視頻顯示到Canvas上琅摩。Video可能不會在所有瀏覽器有效

4.4 定時器資源

  • Timer
  • EventDispatcher
    • Node (有Timer的功能)
  1. 延遲:

Laya.timer.callLater
Laya.timer.once(delay, ...)
Laya.timer.frameOnce(delay, ...)

  1. 間隔循環(huán)

Laya.timer.loop
Laya.timer.frameLoop

  1. 暫停恢復

Laya.timer.pause()
Laya.timer.resume()

  1. 結束

Laya.timer.clear()
Laya.timer.clearAll()

4.5 鼠標事件

//第1種
{
    //在舞臺上添加鼠標事件監(jiān)聽
    Laya.stage.on(Laya.Event.MOUSE_DOWN,this, this.onMouseDown);
}
//點擊觸發(fā)事件
onMouseDown() {
    //記錄點擊到舞臺上的點
    this.point.x = Laya.MouseManager.instance.mouseX;
       this.point.y = Laya.MouseManager.instance.mouseY;
    //產(chǎn)生射線
    this.camera.viewportPointToRay(this.point,ray);
    //拿到射線碰撞的物體
    this.scene.physicsSimulation.rayCast(this.ray,this.outHitResult);
    //如果碰撞到物體
    if (this.outHitResult.succeeded)
    {
        //刪除碰撞到的物體
        this.text.text = "碰撞到了" + this.outHitResult.collider.owner.name ;
        console.log("碰撞到物體6稹房资!")
    }
}

//第2種
export default class MouseScript extends Laya.Script3D{
        constructor(){super();}
        //物體必須擁有碰撞組件(Collider)
        //當被鼠標點擊
        onMouseDown(e){
            //console.log("點擊到了我box",owner.name);
            //從父容器銷毀我自己
            this.owner.removeSelf();
        }
  }

this.staticLayaMonkey.addComponent(MouseScript);

4.6 統(tǒng)計

  • Stat

是一個性能統(tǒng)計面板,可以實時更新相關的性能參數(shù)

method:

  • show()
  • hide()
  • enable()
  • onclick()

4.7 儲存

  • localStorage
  • Browser

localStorage 用于沒有時間限制的數(shù)據(jù)存儲
sessionStorage 針對一個session會話的數(shù)據(jù)存儲檀头,存儲在sessionStorage中的數(shù)據(jù)會在瀏覽器會話結束時(瀏覽器關閉時)被清除轰异。可以從window中拿到

1. LocalStorage

method:

  • clear():void 清除本地存儲信息
  • getItem(key:string):string 獲取指定鍵名的值
  • getJSON(key:string):any 獲取指定鍵命對應的對象類型值
  • removeItem(key:string):void 刪除指定鍵名的信息
  • setItem(key:string, value:string):void 存儲指定鍵名和字符串類型的鍵值
  • setJSON(key:string, value:any):void 存儲指定鍵名及其對應的Object對象類型的值

2. sessionStorage

Laya.Browser繼承自laya.utils.Browser暑始,時瀏覽器代理類搭独,封裝了瀏覽器及原生JS提供的功能。

// 獲取當前頁面中的sessionStorage會話對象
const sessionStorage:any = Laya.Browser.window.sessionStorage;

5. 進階

5.1 H5通信

Laya.Browser:

properties:

  • document dom樹
  • window 窗口
  • container 畫布

method:

  • supportLocalStorage:boolean 是否支持LocalStorage
  • supportWebAudio:boolean 是否支持WebAudio
  • window:any 獲取瀏覽器原生window對象的引用
//添加dom
 Laya.Browser.document.body.appendChild(input);

5.2 Android通信

conch
conch只能LayaNative環(huán)境下調用廊镜,在網(wǎng)頁版本中是沒有conch定義的牙肝,所以需要判斷一下是否存在

Js調用

if(window.conch){
    window.conch.setOnBackPressedFunction(()=>{
        console.log('press back '+n);
        if(n-- <=0){
            window.conch.exit();
        }
        else{
            //用戶自己的代碼,例如返回上層頁面
        }
    });
}

Android調用

ConchJNI. ("common.Utils.revive()");

參考:https://blog.csdn.net/weixin_41640571/article/details/109534212?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-2.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-2.no_search_link

5.3 性能優(yōu)化

1. 2D優(yōu)化

2. 3D優(yōu)化

6. 周邊

TileMap

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市配椭,隨后出現(xiàn)的幾起案子虫溜,更是在濱河造成了極大的恐慌,老刑警劉巖股缸,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件衡楞,死亡現(xiàn)場離奇詭異,居然都是意外死亡敦姻,警方通過查閱死者的電腦和手機瘾境,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來替劈,“玉大人寄雀,你說我怎么就攤上這事≡上祝” “怎么了盒犹?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長眨业。 經(jīng)常有香客問我急膀,道長,這世上最難降的妖魔是什么龄捡? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任卓嫂,我火速辦了婚禮,結果婚禮上聘殖,老公的妹妹穿的比我還像新娘晨雳。我一直安慰自己,他們只是感情好奸腺,可當我...
    茶點故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布餐禁。 她就那樣靜靜地躺著,像睡著了一般突照。 火紅的嫁衣襯著肌膚如雪帮非。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天讹蘑,我揣著相機與錄音末盔,去河邊找鬼。 笑死座慰,一個胖子當著我的面吹牛陨舱,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播版仔,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼隅忿,長吁一口氣:“原來是場噩夢啊……” “哼心剥!你這毒婦竟也來了?” 一聲冷哼從身側響起背桐,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤优烧,失蹤者是張志新(化名)和其女友劉穎链峭,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體弊仪,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年励饵,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片颓鲜。...
    茶點故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖典予,靈堂內(nèi)的尸體忽然破棺而出甜滨,到底是詐尸還是另有隱情,我是刑警寧澤瘤袖,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布衣摩,位于F島的核電站,受9級特大地震影響捂敌,放射性物質發(fā)生泄漏艾扮。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一占婉、第九天 我趴在偏房一處隱蔽的房頂上張望泡嘴。 院中可真熱鬧,春花似錦锐涯、人聲如沸磕诊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至滞磺,卻和暖如春升薯,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背击困。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工涎劈, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留广凸,地道東北人。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓蛛枚,卻偏偏與公主長得像谅海,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子蹦浦,可洞房花燭夜當晚...
    茶點故事閱讀 43,627評論 2 350

推薦閱讀更多精彩內(nèi)容

  • Laya2.0 IDE采用掛載組件腳本與場景管理的方式進行開發(fā)扭吁,在IDE中編輯場景和頁面組件,通過添加腳本的方式盲镶,...
    JunChow520閱讀 1,761評論 0 1
  • 組件 Component LayaAir自帶的組件類都位于laya.ui包中侥袜,所有的組件直接或間接地繼承自Comp...
    JunChow520閱讀 1,277評論 0 0
  • 簡介 這里簡單介紹Qt的一些核心機制,具體參見Qt文檔溉贿。 主要包含內(nèi)容: Qt的信號和槽,以及事件機制 Qt Ob...
    QuietHeart閱讀 1,494評論 0 3
  • 最近用Laya2.0.2制作了3D【瘋狂怪獸車】的跑酷 + 射擊彈幕類微信小游戲項目九杂,在做的過程中躺了不少次坑尼酿,最...
    半透明Feng閱讀 5,161評論 3 7
  • 在線文檔 http://layaair.ldc.layabox.com/api/ 在線案例 http://laya...
    JunChow520閱讀 4,175評論 0 3