123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- import { Node, Label, Color, _decorator, tween, Vec3, Font, Prefab, instantiate, color, Layout } from 'cc';
- import { NodeEx } from '../pool/NodeEx';
- import { NodePool } from '../pool/NodePool';
- import { resLoader } from '../res/ResLoader';
- const { ccclass } = _decorator;
- @ccclass('TipsComp')
- class TipsComp extends NodeEx { }
- export class TipsManager {
- private _root: Node = null; //根节点
- private _font: Font = null; //自定义字体
- private _pool = new NodePool(); //池
- private _label_name: string = "Label";
- constructor(root: Node) {
- this._root = root;
- let tips_node = new Node("Tips").addComponent(TipsComp);
- let label_node = new Node(this._label_name).addComponent(Label);
- tips_node.node.addChild(label_node.node);
- this._pool.init(tips_node.node, 10, 120, false);
- }
- /**
- * 为提示加入自定义字体 自定义字体暂时不释放
- * @param bundle 包名
- * @param url 字体路径
- * @param callback 加载成功回调
- */
- setFont(bundle: string, url: string, callback: Function = null) {
- resLoader.load(bundle, url, Font, (error: Error, res: Font) => {
- if (error) {
- console.error(error);
- } else {
- res.addRef();
- this._font = res;
- callback && callback();
- }
- });
- }
- //提示模板不释放
- setTipsNode(bundle: string, url: string, name: string, callback: Function = null) {
- resLoader.load(bundle, url, Prefab, (error: Error, res: Prefab) => {
- if (error) {
- console.error(error);
- } else {
- res.addRef();
- this._pool.clear();
- // (this._font) && this._font.decRef();
- this._font = null;
- this._label_name = name;
- let tips_node = instantiate(res).addComponent(TipsComp);
- this._pool.init(tips_node.node, 10, 120, false);
- callback && callback();
- }
- });
- }
- /**
- * 提示
- * @param str 提示文字
- * @param size 字体大小
- * @param c 字体颜色
- */
- setTips(str: string, size: number = 30, c: Color = new Color(255,255,255)) {
- let tips_node = this._pool.getNode(this._root);
- if (tips_node) {
- let label = tips_node.node.getChildByName(this._label_name).getComponent(Label);
- this._font && (label.font = this._font);
- tips_node.node.setPosition(0, 300);
- label.color = c;
- label.string = str;
- label.fontSize = size;
- label.updateRenderData(true);
- let layout = tips_node.getComponent(Layout);
- if (layout) {
- layout.type = Layout.Type.HORIZONTAL;
- layout.updateLayout(true);
- layout.type = Layout.Type.VERTICAL;
- layout.updateLayout(true);
- }
- tween(tips_node.node).delay(0.5).by(0.5, { position: new Vec3(0, 150, 0) }).call(() => {
- this._pool.putNode(tips_node);
- }).start();
- }
- }
- }
|