Laya学习第一部分 关于Text

学习了Laya的Text部分,引申出了一些知识点。看图


Text.png

文本Text

Laya的Text和Unity的Text差不多,但是有一个特点就是可以实现文本的滑动
先上Text的基础属性(JS语言)

//创建一个基本Text
var txt = new Laya.Text();
txt.text =  "Layabox是HTML5引擎技术提供商与优秀的游戏发行商,面向AS/JS/TS开发者提供HTML5开发技术方案!\n";

txt.bgColor = "#555555";//文本域的颜色(背景颜色)
txt.color = "#ffffff";  //文字颜色
txt.fontSize = 20;      //字体大小
txt.bold = true;        //粗体
txt.italic = true;      //斜体
txt.wordWrap = true;    //自动换行
txt.x = 160;            //Text的x位置
txt.y= 340;             //Text的y位置
txt.borderColor = "#ffff00";  //文本边框颜色
        
//需要设置文本区域 水平居中和垂直居中才有效果
txt.width = 400;    //文本的宽
txt.height = 50;    //文本的高
txt.align = "center";  //文本水平居中
txt.valign = "middle"; //文本垂直居中
//当文本超过文本域范围 相应的处理方式
//hidden:隐藏文本域外的内容    visible:显示全部内容    scroll:隐藏文本域外的内容,支持文本滑动
txt.overflow = "scroll" 
//将Text加载到舞台上面
Laya.stage.addChild(txt);

实现Text的滑动(JS语言):通过实现监控鼠标的滑动位移来实现文本的滑动

    createTextGun()
    {
        this.txt = new Laya.Text();
        this.txt.overflow = Laya.Text.SCROLL;  
        this.txt.text =
            "Layabox是HTML5引擎技术提供商与优秀的游戏发行商,面向AS/JS/TS开发者提供HTML5开发技术方案!\n" +
            "Layabox是HTML5引擎技术提供商与优秀的游戏发行商,面向AS/JS/TS开发者提供HTML5开发技术方案!\n" +
            "Layabox是HTML5引擎技术提供商与优秀的游戏发行商,面向AS/JS/TS开发者提供HTML5开发技术方案!\n" +
            "Layabox是HTML5引擎技术提供商与优秀的游戏发行商,面向AS/JS/TS开发者提供HTML5开发技术方案!\n" +
            "Layabox是HTML5引擎技术提供商与优秀的游戏发行商,面向AS/JS/TS开发者提供HTML5开发技术方案!\n" +
            "Layabox是HTML5引擎技术提供商与优秀的游戏发行商,面向AS/JS/TS开发者提供HTML5开发技术方案!\n" +
            "Layabox是HTML5引擎技术提供商与优秀的游戏发行商,面向AS/JS/TS开发者提供HTML5开发技术方案!\n" +
            "Layabox是HTML5引擎技术提供商与优秀的游戏发行商,面向AS/JS/TS开发者提供HTML5开发技术方案!\n" +
            "Layabox是HTML5引擎技术提供商与优秀的游戏发行商,面向AS/JS/TS开发者提供HTML5开发技术方案!";

        this.txt.size(200, 100);
        this.txt.x = Laya.stage.width - this.txt.width >> 1;
        this.txt.y = Laya.stage.height - this.txt.height >> 1;

        this.txt.borderColor = "#FFFF00";
        this.txt.fontSize = 20;
        this.txt.color = "#ffffff";

        Laya.stage.addChild(this.txt);
        this.txt.on(Laya.Event.MOUSE_DOWN, this, this.startScrollTextGun);
    }

     //开始滚动文本
    startScrollTextGun()
    {
        this.prevX = this.txt.mouseX;
        this.prevY = this.txt.mouseY;

        Laya.stage.on(Laya.Event.MOUSE_MOVE, this, this.scrollTextGun);
        Laya.stage.on(Laya.Event.MOUSE_UP, this, this.finishScrollTextGun);
    }

     //停止滚动文本
    finishScrollTextGun()
    {
        Laya.stage.off(Laya.Event.MOUSE_MOVE, this, this.scrollTextGun);
        Laya.stage.off(Laya.Event.MOUSE_UP, this, this.finishScrollTextGun);
    }

    //鼠标滚动文本
    scrollTextGun()
    {
        var nowX = this.txt.mouseX;
        var nowY = this.txt.mouseY;

        this.txt.scrollX += this.prevX - nowX;
        this.txt.scrollY += this.prevY - nowY;

        this.prevX = nowX;
        this.prevY = nowY;
    }

由Text的自我滑动,引申添加ScrollBar组件进行文字的滑动

滑动条ScrollBar

这个组件也和Unity里面的差不多,但是单独分为了VScrollBar和HScrollBar组件
一些需要注意的属性:
scrollSize:点击按钮滚动量
value:滚动条当前进度

//1.直接监听
//使用滚动条的滚动比例 去乘以 文本的横向滚动的最大值  就可以得到当前文本滚动的位置
this.txt.scrollX = this.scrollBar.value * this.txt.maxScrollX;

//2.通过scrollBar自带的  “滚动变化时回调,回传value参数”
//通过监听scrollbar的方法也可以 控制文字滑动   (这种使用handler进行监听的方式  必须放在onUpdate里面)
this.scrollBar.changeHandler = Laya.Handler.create(this,this.onValueChange)

onValueChange(value){
      console.log(value);
      this.txt.scrollX = value * this.txt.maxScrollX;
}

说完滑动条,由Text延伸出TextInput

输出文本TextInput

这个组件没啥好说的,看代码,只需要注意多行输入的设置条件
txtInput.wordWrap = true;//设置自动换行
txtInput.multiline = true;//设置textInput的多行输入

 //创建一个单行输入textInput
 createTextInput(){
        //创建一个单行输入textInput
        var textInput = new Laya.TextInput("单行输入");
        textInput.wordWrap = true; 
        textInput.fontSize = 30;
        textInput.x = 0;
        textInput.y = 0;
        textInput.width = 300;
        textInput.height = 200;
        textInput.bgColor = "#aabbcc";
        Laya.stage.addChild(textInput);

        //创建一个多行输入textInput
        var txtInput = new Laya.TextInput("多行输入");
        txtInput.fontSize = 30;
        //这两个属性同时设置 才能进行多行输入
        txtInput.wordWrap = true;
        txtInput.multiline = true;//设置textInput的多行输入
        txtInput.x = 0;
        txtInput.y = 300;
        txtInput.width = 300;
        txtInput.height = 200;
        txtInput.bgColor = "#aabbcc";
        Laya.stage.addChild(txtInput);
}

因为是文本使用,肯定就设计到字体的问题,在Unity里面使用字体还是挺方便的,但是在Laya里面就是一个天坑。

字体的使用

位图字体

位图字体:简单理解就是用图片制作的字体,当然实际上不止使用图片,还可以使用自定义文本数据来作为位图字体的数据。

位图字体的制作:

1.通过文本来创建位图字体

  • 文本必须保存为Unicode编码格式
  • 打开bmfont工具 首先要在Font Settings中设置字体(如果文本中存在中文,则需要使用识别中文的字体),再去导入相关的Txt文件。
  • 进行导出设置的时候 需要选择32位(带透明层)和XML格式, 这是Laya才能识别的文件
  • 导出的.fnt和。png文件名可能不同,必须改为相同才能在Laya里面使用

2.通过图片来创建位图字体
使用图片创建的位图字体和用文字创建位图字体的差别就在于:需要将图片和AscII里面的字符一一对应起来。其他规则和上诉一样。

在Laya下使用位图字体

同上,在编辑器中使用位图字体显示没问题,一旦你开始运行,位图字体的效果则不会展示,需要运行时对字体进行注册加载。
将创建好的位图字体放在bin/Font/目录下,Font是自定义的文件夹

//创建位图字体对象
var bitfontmap = new Laya.BitmapFont();
//加载位图字体 并注册 然后赋给相关的Text
bitfontmap.loadFont("Font/nummap.fnt",Laya.Handler.create(this,function(){
     //注册位图字体  第一个参数 是自己定义的位图字体的名字
     Laya.Text.registerBitmapFont("nihao",bitfontmap);
     this.txt.font = "nihao";
}));

在Laya下使用ttf字体

关于ttf字体也只能在运行时加载
如果使用PC里面自带的字体,在浏览器中可能能看到使用的字体没有问题,但是一旦你使用手机去测试,就会发现字体变为了默认字体。所以关于TTF字体一定要在运行时注册加载并赋予Text Font才行!

//加载ttf字体
Laya.loader.load("Font/BalooBhaina-Regular.ttf",Laya.Handler.create(this,function(res){
      console.log(res);
      this.othertxt.font = res.fontName;
}),null,Laya.Loader.TTF,0,true);

这里要注意一点,加载ttf文件,得到的是一个关于字体的信息集合对象res,你得获取里面的name才能正确的给Text赋予字体。

学习到这里,关于Text的部分就差不多了,但是又了解到一个超级好用的组件FontClip

FontClip

这个组件是Laya里面的一个好东东,它可以便捷的让你在Laya里面使用图片来作为位图字体,一般主要用于数字,是按等比宽度去获取每一个字符。
需要注意的是图片资源里面的文字和sheet属性里面填写的字段要一一对应,这样就能像在Unity使用普通字体那样使用位图字体了

FontClip.png

总结

这是正式接触Laya学习的第一部分内容,尽管之前已经做了一个2D Demo和一个3D Demo,但是对游戏引擎的学习还是需要深入去学习了解。尽管Laya有这样那样的问题,但是好歹是国产引擎,也算牌面之一,努力加油!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,287评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,346评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,277评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,132评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,147评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,106评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,019评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,862评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,301评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,521评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,682评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,405评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,996评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,651评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,803评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,674评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,563评论 2 352