Laya学习笔记
文章目录
1.节点
this->当前的组件实例
owner是是一个Laya.display.Node对象,也是一个Sprite对象,场景里边的所有元素都继承Sprite
名字:name-> laya.display.Node |
位置:x,y ->laya.display.Sprite |
大小:width,heigh ->laya.display.Sprite |
旋转:rotation ->laya.display.Sprite |
缩放:scaleX,scaleY->laya.display.Sprite |
扭曲:skewX,skewY->laya.display.Sprite |
可见性:visible->laya.display.Sprite |
透明性:alpha->laya.display.Sprite |
中心点:pivotX,povitY->laya.display.Sprite |
2.调用其他组件实例的方法
获取其他组件实例,通过组件实例调用方法,如果有多个此组件,会返回最先找到的那一个组件
var test=this.owner.getComponent(Test);
test.fun_test();
关于import Test from “./Test”,如果在同一文件夹下就只需要该类的名就可
3.编辑器绑定
编辑器会解析@prop来把变量绑定到编辑器
@prop{name:名字,tips:提示,type:类型,default:默认值}
绑定编辑器上变量到类的数据成员
编辑器绑定的数据类型:
基本数据类型:Number,String,Bool
场景节点类型:Node,Sprite,Button,不需要带包名
4.组件代码中找节点
代码组件实例->节点 this.owner;
查找节点,查找节点和场景树的结构关系,都在laya.display.Node
当前节点的父亲节点:节点.parent
根据名字来找孩子节点:
索引进行查找,节点存放孩子在_children中,numChildren 孩子个数
给一个节点,查找该节点在父亲的第几个索引
var start=this.owner.getChildByName("start");
var index=start.parent.getChildIndex(start);
5.用代码添加一个文本到owner节点下
var txt=new Laya.Text();
txt.color="#000000";
txt.fontSize=25;
txt.text="Blake";
this.owner.addChild(txt);
this.owner.addChidren()=>添加多个不同的节点
一个节点如果已经加入场景树,就不能再重复添加了
6.获取当前的场景的方法
文件模式:在Main类中加载完场景后回调方法,将场景传递给指定脚本的初始化函数
例如:
onConfigLoaded(): void {
//加载IDE指定的场景
GameConfig.startScene && Laya.Scene.open(GameConfig.startScene,true,this,Laya.Handler.create(this,this.onLoadScene));
}
onLoadScene(onLoadScene:Laya.Scene): void {
console.log("Main类中"+onLoadScene);
var player=onLoadScene.getChildByName("player");
player.getComponent(GameController).Init(onLoadScene);
}
将脚本挂载在场景上,在Awake中
this.scene=this.owner as Laya.Scene;
任何一个节点都可以找他所在的场景节点:节点.scene
var scene =start.scene;
7.物体要添加到当前场景的子节点中,不然不会显示在场景中
8.Sprite
laya里面Laya.display.Node处理的是场景树的关系的对象,所有的laya显示对象都继承自它
laya里面laya.display.Sprite处理的是场景中的位置,大小,缩放等信息,所有的显示对象也都继承自它
laya.display.Sprite是所有显示对象的基类
9.Image九宫格模式
指定拉伸区域,节点大小改变的时候,只在指定的拉伸区域拉伸
在工程目录下对Image设置区域,九宫格能节省图片大小,能保持物体的边角形状
九宫格需要使用laya.ui.image对象来显示,继承自Sprite
图片可以指定拖入到场景的类型
10.Handler对象
创建一个Handler对象:Laya.Handler.Create(函数中的this对象,回调函数,参数数组,立即回收);
不直接new而使用create方法从对象池中创建;
run();直接触发一个Handler;
var h=Laya.Handler.create("HelloWorld!",function(){
console.log(this);--------this->"HelloWorld!"
});
h.run();//触发一个函数Handler调用
runWith();携带参数触发,参数可以单个对象或者数组;
var h=Laya.Handler.create("Helloworld!",function(arg1,name.value){
console.log(this);--------this->"Helloword!"
console.log(arg1);---------arg1->1
console.log(name);---------name->"blake"
console.log(value);--------value->1000
},[1,"blake"],false);------->false:不回收,使用recover()手动回收;不传参,默认true,回收
h.runWith(1000);
h.recover();
[1,“blake”]可以省略,在API中参数如果有个问号,即可省略参数
创建一个Handler,触发一个Handler
作用:通知,回调
创建一个handler,告诉某个管理模块,当有某某事件发生的时候,就触发这个Handler ->调用在创建Handler传入的函数对象
事件
1.物体跟随鼠标按下后移动而移动
该方法也可用于移动平台的触摸跟随移动
onStart():void
{
//在start中添加事件
Laya.stage.on(Laya.Event.MOUSE_DOWN,this,this.MouseDown);
Laya.stage.on(Laya.Event.MOUSE_MOVE,this,this.MouseMove);
Laya.stage.on(Laya.Event.MOUSE_UP,this,this.MouseUp);
}
//鼠标移动事件
MouseMove() {
//bool值判断是否按下
if(this.isMouseDown){
this.player.x=Laya.stage.mouseX;
this.player.y=Laya.stage.mouseY;
}
}
//鼠标按下事件
MouseDown() {
this.isMouseDown=true;
}
//鼠标抬起事件
MouseUp()
{
this.isMouseDown=false;
}
player.y=Laya.stage.mouseY;
}
}
//鼠标按下事件
MouseDown() {
this.isMouseDown=true;
}
//鼠标抬起事件
MouseUp()
{
this.isMouseDown=false;
}