1:例一,注意点如下:
1.1:注意on函数中的监听器的名字不能带(),dianjiwenben不能写成dianjiwenben(),不然该函数只会在启动的时候被触发一次
1.2:通过Sprite来加载的图片将会覆盖它下方的所有view,也就是说,它下方的所有view都不能相应监听事件,只有它能响应监听事件。
代码如下:
Laya.init(600, 400);
Laya.stage.scaleMode = "full";
/*加载文本*/
var text = new Laya.Text();
text.align = "center";
text.text = "我是文本";
text.color = "red";
text.bold = true;
text.fontSize = 30;
text.on(Laya.Event.CLICK, "", dianjiwenben);//注意on函数中的监听器的名字不能带(),dianjiwenben不能写成dianjiwenben(),不然该函数只会在启动的时候被触发一次
/*加载图片*/
var tuyi=new Laya.Image();
tuyi.width=100;
tuyi.height=100;
tuyi.x=Laya.stage.width / 2;
tuyi.y= Laya.stage.height / 2;
tuyi.dataSource="res/images/1.png";
tuyi.on(Laya.Event.CLICK, "", dianjitupian);
Laya.stage.addChildren(text,tuyi);
function dianjiwenben() {
console.log("你点击了文本")
}
function dianjitupian() {
console.log("你点击了图片")
}
function wanbi() {
console.log("加载完毕")
}
效果如下:
从控制台可以看到点击文本就出发文本的监听事件,点击图片就触发图片的监听事件
如果是图片是通过Sprite的loadImage来加载的,效果就不一样了,代码如下:
Laya.init(600, 400);
Laya.stage.scaleMode = "full";
/*加载文本*/
var text = new Laya.Text();
text.align = "center";
text.text = "我是文本";
text.color = "red";
text.bold = true;
text.fontSize = 30;
text.on(Laya.Event.CLICK, "", dianjiwenben);//注意on函数中的监听器的名字不能带(),dianjiwenben不能写成dianjiwenben(),不然该函数只会在启动的时候被触发一次
/*加载图片*/
var tupian = new Laya.Sprite();
tupian.loadImage("res/images/1.png", Laya.stage.width / 2, Laya.stage.height / 2, 100, 100, wanbi());
tupian.on(Laya.Event.CLICK, "", dianjitupian);
Laya.stage.addChildren(text,tupian);
function dianjiwenben() {
console.log("你点击了文本")
}
function dianjitupian() {
console.log("你点击了图片")
}
function wanbi() {
console.log("加载完毕")
}
通过控制台可以看出text已经获取不到点击事件了,全都让图片消费了单击事件了
为什么会这样呢?因为图片的坐标是屏幕的宽和高的中点,那么图片的响应事件的区域就是下方图片的白色边框区域,所以text也被覆盖了:
如果是图片是通过Sprite的graphics.drawTexture来加载的,效果又不一样了,代码如下:
Laya.init(600, 400);
Laya.stage.scaleMode = "full";
/*加载文本*/
var text = new Laya.Text();
text.align = "center";
text.text = "我是文本";
text.color = "red";
text.bold = true;
text.fontSize = 30;
text.on(Laya.Event.CLICK, "", dianjiwenben);//注意on函数中的监听器的名字不能带(),dianjiwenben不能写成dianjiwenben(),不然该函数只会在启动的时候被触发一次
/*加载图片*/
var tupian = new Laya.Sprite();
Laya.loader.load("res/images/1.png",Laya.Handler.create(this,huizhitupian));
tupian.on(Laya.Event.CLICK, "", dianjitupian);
Laya.stage.addChildren(text,tupian);
function huizhitupian(){
tupian.graphics.drawTexture(Laya.loader.getRes("res/images/1.png"), Laya.stage.width / 2, Laya.stage.height / 2, 100, 100);
}
function dianjiwenben() {
console.log("你点击了文本")
}
function dianjitupian() {
console.log("你点击了图片")
}
效果如下
从控制台可以看出图片响应不到任何事件,而且图片的位置也和其他两种加载图片的方式完全不一样了
2:例二:放大镜的例子,注意点如下:
2.1:如果文件中要写全局变量的话或者是需要系统自动执行的代码,那么就将所有的代码写在(function () {...})()的花括号里面,这样的函数并没有写函数名,然后系统会自动调用该函数,也可以在该函数体中将全局变量抽取出来;
2.2:Laya.init(1136, 640, Laya.WebGL);第三个参数Laya.WebGL可以增加游戏的流畅度,如果不写这个参数的话,有时候就可卡了,但是写了这个参数一直都很流畅。
代码如下:
(function () {
var bg2;
var maskSp;
Laya.init(1136, 640, Laya.WebGL);
Laya.stage.scaleMode = "full";
Laya.loader.load("res/images/1.png", Laya.Handler.create(this, setup));
function setup() {
var bg = new Laya.Sprite();
bg.loadImage("res/images/1.png");
Laya.stage.addChild(bg);
bg2 = new Laya.Sprite();
bg2.loadImage("res/images/1.png");
Laya.stage.addChild(bg2);
bg2.scale(3, 3);
maskSp = new Laya.Sprite();
maskSp.graphics.drawCircle(20, 20, 20, "green");
maskSp.pivot(20, 20);
bg2.mask = maskSp;
Laya.stage.on(Laya.Event.MOUSE_MOVE, this, onMouseMove);
}
function onMouseMove() {
bg2.x = -Laya.stage.mouseX * 2;
bg2.y = -Laya.stage.mouseY * 2;
maskSp.x = Laya.stage.mouseX;
maskSp.y = Laya.stage.mouseY;
}
})()
效果如下:
3:例三:绘制各种图形,注意点如下:
3.1:所有写在(function () {...})()的花括号里面的代码都会被系统自动执行,这类函数是没有函数名的,看下方的代码总结出的;
代码如下:
(function()
{
var Sprite = Laya.Sprite;
var Stage = Laya.Stage;
var WebGL = Laya.WebGL;
var sp;
(function()
{
// 不支持WebGL时自动切换至Canvas
Laya.init(740, 400, WebGL);
Laya.stage.scaleMode="full"
Laya.stage.bgColor = "#232628";
drawSomething();
})();
function drawSomething()
{
sp = new Sprite();
Laya.stage.addChild(sp);
//画线
sp.graphics.drawLine(10, 58, 146, 58, "#ff0000", 3);
//画连续直线
sp.graphics.drawLines(176, 58, [0, 0, 39, -50, 78, 0, 117, 50, 156, 0], "#ff0000", 5);
//画曲线
sp.graphics.drawCurves(352, 58, [0, 0, 19, -100, 39, 0, 58, 100, 78, 0, 97, -100, 117, 0, 136, 100, 156, 0], "#ff0000", 5);
//画矩形
sp.graphics.drawRect(10, 166, 166, 90, "#ffff00");
//画多边形
sp.graphics.drawPoly(264, 166, [0, 0, 60, 0, 78.48, 57, 30, 93.48, -18.48, 57], "#ffff00");
//画三角形
sp.graphics.drawPoly(400, 166, [0, 100, 50, 0, 100, 100], "#ffff00");
//画圆
sp.graphics.drawCircle(98, 332, 50, "#00ffff");
//画扇形
sp.graphics.drawPie(240, 290, 100, 10, 60, "#00ffff");
//绘制圆角矩形,自定义路径
sp.graphics.drawPath(400, 310, [
["moveTo", 5, 0],
["lineTo", 105, 0],
["arcTo", 110, 0, 110, 5, 5],
["lineTo", 110, 55],
["arcTo", 110, 60, 105, 60, 5],
["lineTo", 5, 60],
["arcTo", 0, 60, 0, 55, 5],
["lineTo", 0, 5],
["arcTo", 0, 0, 5, 0, 5],
["closePath"]
],
{
fillStyle: "#00ffff"
});
}
})();
效果图如下:
4:例四:Timer和Tween的简单使用
代码如下:
(function () {
Laya.init(500, 500);
var text = new Laya.Text();
text.text = "我是文本";
text.color = "green";
text.fontSize = 30;
Laya.stage.addChild(text);
Laya.timer.loop(1000, this, chongfuX);
Laya.timer.loop(1000, this, chongfuY);
function chongfuX() {
Laya.Tween.to(text, { x: text.x + 100 }, 1000);
}
function chongfuY() {
Laya.Tween.from(text, { y: text.y + 100 }, 1000);
}
})()
效果如下:
文字不停的上下左右做运动
5:例五:网络请求之get请求,代码如下:
var httpRequest = new Laya.HttpRequest();
httpRequest.on(Laya.Event.COMPLETE, this, response);
httpRequest.send('http://xkxz.zhonghao.huo.inner.layabox.com/api/getData?name=myname&psword=xxx', null, 'get', 'text');
function response() {
console.log(httpRequest.data)
}
输出结果如下:
api总结如下:
//直接调用
**************************************************
Laya.init//初始化舞台的宽和高
**************************************************
Laya.stage//用来获取舞台示例
Laya.stage.width//获取舞台的宽
Laya.stage.height//获取舞台的高
Laya.stage.scaleMode//设置舞台的缩放比例
Laya.stage.addChild//添加一个view
Laya.stage.addChildren//添加多个view
Laya.stage.bgColor//设置舞台的背景颜色
Laya.stage.on//给舞台设置监听
Laya.stage.mouseX//鼠标在Stage上的X轴坐标
Laya.stage.mouseY//鼠标在Stage上的Y轴坐标
Laya.stage.alignV//设置舞台的垂直方向的对齐方式
Laya.stage.alignH//设置舞台的水平方向的对齐方式
**************************************************
Laya.Event//获取各种事件
Laya.Event.CLICK//单击事件
Laya.Event.MOUSE_MOVE//鼠标的移动事件
Laya.Event.PROGRESS//网络请求正在进行中的事件
Laya.Event.COMPLETE//网络请求完成之后的事件
Laya.Event.ERROR//网络请求出错之后的事件
**************************************************
Laya.loader
Laya.loader.load//加载资源,返回一个LoaderManager对象
Laya.loader.getRes//加载资源,返回资源
**************************************************
Laya.Handler
Laya.Handler.create//创建一个Handler对象
**************************************************
Laya.timer
Laya.timer.once//定时执行一次
Laya.timer.loop//定时重复执行
Laya.timer.frameOnce//定时执行一次(基于帧率)
Laya.timer.frameLoop//定时重复执行(基于帧率)
Laya.timer.callLater//延迟执行
**************************************************
Laya.Stat
Laya.Stat.show//显示性能统计信息
**************************************************
Laya.Tween
Laya.Tween.to//缓动对象的props属性到目标值
Laya.Tween.from//从props属性,缓动到当前状态
**************************************************
//需要new的对象
var text=new Laya.Text()//new一个Text对象
text.align//设置对齐方式
text.text//设置文本内容
text.color//设置文本颜色
text.bold//设置文本是否加粗
text.fontSize//设置文本的大小
text.on//设置文本的监听事件
**************************************************
var image=new Laya.Image()//new一个Image对象
image.width//设置图片的宽度
image.height//设置图片的高度
image.x//设置图片的x坐标
image.y//设置图片的y坐标
image.dataSource//设置目标图片的路径
image.on//设置监听
**************************************************
var label = new Laya.Label();
label.font//设置label的字体
label.text//设置label的文本
label.fontSize//设置label的字体的大小
label.color//设置label的字体的颜色
label.stroke//设置label字体的外边线条的宽度
label.strokeColor//设置label字体的外边线条的颜色
**************************************************
var button= new Laya.Button()//new一个按钮
**************************************************
var radioGroup= new RadioGroup();//new一个单选框
radioGroup.skin;//设置单选框的皮肤
radioGroup.space;//设置项对象们之间的间隔(以像素为单位)
radioGroup.direction;//设置布局方向
radioGroup.labels;//设置标签集合字符串,以逗号做分割
radioGroup.labelColors;//设置每个标签的颜色
radioGroup.labelSize;//设置标签的大小
radioGroup.labelBold;//设置标签是否加粗
radioGroup.labelPadding;//设置标签的内边距
radioGroup.selectHandler;//当单选框的选择项改变的时候执行的处理器
**************************************************
var checkBox= new Laya.CheckBox();//new一个复选框
checkBox.labelColors//设置颜色
checkBox.labelSize//设置大小
checkBox.labelFont//设置字体
checkBox.labelPadding//设置内边距
**************************************************
var sprite=new Laya.Sprite()//new一个精灵
sprite.loadImage//加载图片
sprite.on//设置监听
sprite.graphics.drawTexture//绘制图片
sprite.graphics.drawCircle//绘制圆,如果是作为遮罩的话,记得写上颜色,不然遮罩是没有效果的
sprite.graphics.drawPoly//绘制多边形
sprite.graphics.drawLine//画线
sprite.graphics.drawLines//画连续直线
sprite.graphics.drawCurves//画曲线
sprite.graphics.drawRect//画矩形
sprite.graphics.drawPie//画扇形
sprite.graphics.drawPath//画自定义路径
sprite.pos//设置坐标位置
sprite.size//设置宽高
sprite.mask//设置遮罩
sprite.filters//应用滤镜
sprite.scale//设置缩放
sprite.graphics.clear//清空绘制
sprite.cacheAsBitmap//将多个显示对象缓存成静态图像可以大幅提升渲染效率
sprite.addChild//不仅舞台可以添加子节点,精灵也可以添加子节点
sprite.pivot//设置精灵的轴心点,改变pivot可以控制旋转和缩放的中心
**************************************************
var colorFilter=new Laya.ColorFilter()//new一个颜色滤镜
**************************************************
var glowFilter =new Laya.GlowFilter()//new一个发光滤镜
**************************************************
var blurFilter = new Laya.BlurFilter();//new一个模糊滤镜
blurFilter.strength//设置模糊强度
**************************************************
var movieClip= new Laya.MovieClip();//MovieClip可以加载并播放SWF动画,SWF由Flash IDE创建,SWF不能包含代码
movieClip.load//加载并播放SWF动画
**************************************************
var animation= new Laya.Animation()//Animation可以加载并播放图集动画,图集可以使用LayaAir IDE或者TexturePacker导出
animation.loadAtlas//加载图集动画
animation.interval//设置播放间隔(单位:毫秒)
animation.index//设置当前播放索引
animation.play()//播放图集动画
animation.getGraphicBounds()//获取动画的边界信息
**************************************************
var timeLine = new Laya.TimeLine();//可以实现缓动动画
timeLine.addLabel//在时间队列中加入一个标签,返回一个TimeLine对象
timeLine.to//控制一个对象,从当前点移动到目标点
**************************************************
var httpRequest = new Laya.HttpRequest();
httpRequest.on//给网络请求添加监听器
httpRequest.send//发送网络请求
httpRequest.data//网络请求所返回来的数据
**************************************************
网友评论