1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- //一个简单的tost组件,用法:
- // let Toast = reqire('Toast.js')
- // Toast(text,{gravity,duration,bg_color})
- //text:要显示的字符串
- //gravity(可选):位置,String类型,可选值('CENTER','TOP','BOTTOM'),默认为'CENTER'
- //duration(可选):时间,Number类型,单位为秒,默认1s
- //bg_color(可选):颜色,cc.color类型,默认cc.color(102, 102, 102, 200)
- function Toast(
- text = "",
- {
- gravity = "CENTER",
- duration = 1,
- bg_color = cc.color(102,102,102,200)
- } = {}
- ){
- //canvas
- let canvas = cc.director.getScene().getComponentInChildren(cc.Canvas);
- let width = canvas.node.width;
- let height = canvas.node.height;
- let bgNode = new cc.Node();
- //Label文本格式设置
- let textNode = new cc.Node();
- let textLabel = textNode.addComponent(cc.Label);
- textLabel.horizontalAlign = cc.Label.HorizontalAlign.CENTER;
- textLabel.verticalAlign = cc.Label.VerticalAlign.CENTER;
- textLabel.fontSize = 30;
- textLabel.string = text;
- //当文本宽度过长时,设置为自动换行格式
- if (text.length * textLabel.fontSize > (width * 3) / 5){
- textNode.width = (width * 3) / 5;
- textLabel.overflow = cc.Label.Overflow.RESIZE_HEIGHT;
- }else {
- textNode.width = text.length * textLabel.fontSize;
- }
- let lineCount = ~~((text.length * textLabel.fontSize) / ((width * 3) / 5)) + 1;
- textNode.height = textLabel.fontSize * lineCount;
- //背景设置
- let ctx = bgNode.addComponent(cc.Graphics);
- ctx.arc(
- -textNode.width / 2,
- 0,
- textNode.height / 2 + 20,
- 0.5 * Math.PI,
- 1.5*Math.PI,
- true
- );
- ctx.lineTo(textNode.width / 2, -(textNode.height / 2 + 20));
- ctx.arc(
- textNode.width / 2,
- 0,
- textNode.height / 2 + 20,
- 1.5 * Math.PI,
- 0.5 * Math.PI,
- true
- );
- ctx.lineTo(-textNode.width / 2, textNode.height / 2 + 20);
- ctx.fillColor = bg_color;
- ctx.fill();
- bgNode.addChild(textNode);
- // gravity 设置Toast显示的位置
- if (gravity === "CENTER"){
- bgNode.y = 0;
- bgNode.x = 0;
- }else if (gravity === "TOP"){
- bgNode.y = bgNode.y + (height / 5) * 2;
- }else if (gravity === "BOTTOM"){
- bgNode.y = bgNode.y - (height / 5) * 2;
- }
- canvas.node.addChild(bgNode);
- let finished = cc.callFunc(function (){
- bgNode.destroy();
- });
- let action = cc.sequence(
- cc.moveBy(duration, cc.v2(0, 0)),
- cc.fadeOut(0.3),
- finished
- );
- bgNode.runAction(action);
- }
- module.exports = Toast;
|