Creator小提示的实现 | 不重复自动显示内容

Creator小提示的实现 | 不重复自动显示内容

不少游戏中都有小提示
这次来用Creator写一个小提示脚本
在这里插入图片描述
请添加图片描述
给出代码


import { _decorator, Component, Node, LabelComponent, CCString, random, CCBoolean, error, CCFloat } from 'cc';
const { ccclass, property } = _decorator;

@ccclass('Hint')
export class Hint extends Component {
 
    @property({displayName: "小提示文字", tooltip: "小提示文字", type: LabelComponent, displayOrder: 0})
    hint_lb: LabelComponent = null!;
 
    @property({displayName: "小提示内容", tooltip: "小提示的内容,代码会随机在里面抽取一个显示到文字上,内容数量必须至少有2个", type: CCString, displayOrder: 1})
    hint: string[] = [];

    @property({
        displayName: "自动更新显示内容", 
        tooltip: "是否自动更新显示内容,游戏加载完成后每几秒就自动更新一次小提示显示内容,勾选之后会在onLoad执行一个定时器每隔几秒更新一次显示内容", 
        displayOrder: 2
    })
    is_auto: boolean = false;

    @property({
        visible: function () {
            return (this.is_auto);
        }, 
        displayName: "每几秒自动更新一次小提示", 
        tooltip: "每几秒自动更新一次小提示", 
        type: CCFloat, 
        displayOrder: 3
    })
    auto_time: number = 3;

    @property({
        displayName: "不重复显示", 
        tooltip: "勾上后每次更新显示的内容将不再重复,如果小提示内容里的每一个元素都显示过一遍,就不得不重复显示,但也不会出现相邻两次更新内容一样的情况", 
        displayOrder: 4
    })
    is_noRepeat: boolean = true;

    @property({displayName: "游戏加载后更新内容", tooltip: "是否在游戏运行后更新小提示显示的内容,就是PlayOnLoad", displayOrder: 5})
    play_onLoad: boolean = true;

    // 每个内容是否显示过
    content: boolean[] = [];
    // 上一次循环最后一个数字
    num: number = null!;

    onLoad () {
        // 刚开始每个内容都没有显示过
        for (let i = 0; i < this.hint.length; i ++) {
            this.content[i] = false;
        }

        // 如果勾选了加载后更新内容
        if (this.play_onLoad == true) {
            // 更新内容
            this.update_content();
            // console.log("游戏加载后更新");
        }

        let self = this;

        // 如果自动更新显示内容
        if (this.is_auto == true) {
            // 定时器,每几秒更新一次显示内容
            this.schedule(function () {
                self.update_content()
            }, this.auto_time);
        }
    }


    // 更新小提示显示内容专用函数
    update_content () {
        // 如果小提示内容数组的长度小于等于一,就不继续执行代码并且报错
        if (this.hint.length <= 1) {
            error("来自hint小提示脚本的错误,你必须设置至少两个小提示内容");
            return;
        }

        // 如果勾选了不重复显示
        if (this.is_noRepeat == true) {
            // 显示过的内容的次数
            let time = 0;
            // 判断有多少个内容显示过了
            for (let i = 0; i < this.content.length; i++) {
                if (this.content[i] == true) {
                    time ++;
                }
            }
            // 如果每个内容都显示过一遍了,就把content(每个内容是否显示过的Boolean数组)全部重新设为false,重新开始一轮
            if (time >= this.hint.length) {
                for (let i = 0; i < this.hint.length; i ++) {
                    this.content[i] = false;
                }
                // console.log("隔断线;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"); 
            }

            // 随机数,目的是随机显示小提示
            let num = this.random(0, this.hint.length - 1);

            // 如果这个小提示显示过了
            if (this.content[num] == true) {
                for (let i = 0; i < this.content.length; i++) {
                    // 找一个没显示过的小提示
                    if (this.content[i] == false) {
                        // 获取没显示过的小提示的号码
                        num = i;
                        break;
                    }
                }
            }

            // 如果新的一轮轮回的第一个结果和上次轮回的最后一个小提示内容一样,也就是出现连续重复了
            if (num == this.num) {
                // 重新随机显示小提示
                while (num == this.num) {
                    // 随机数,目的是随机显示小提示
                    num = this.random(0, this.hint.length - 1);
                    // console.log("循环了一遍数组之后出现了难得的重复");
                }
            }

            // 设置这个小提示显示过了
            this.content[num] = true;
            // 设置上次显示的小提示号码
            this.num = num;

            // console.log(this.content);

            // 显示小提示
            this.hint_lb.string = "小提示:" + this.hint[num];
            // console.log("参数", 0, this.hint.length - 1, "随机数:", num + 1);
        } else {
            // 随机数,目的是随机显示小提示
            let num = this.random(0, this.hint.length - 1);
            // 显示小提示
            this.hint_lb.string = "小提示:" + this.hint[num];
            // console.log("参数", 0, this.hint.length - 1, "随机数:", num + 1);
        }
    }


    // 随机数,传入两个参数,返回一个number,number的大小范围是min - max
    random (min: number, max: number) {
        return (Math.floor(Math.random() * (max - min + 1)) + min);
    }


}

新建一个脚本把这些代码复制粘贴进去,脚本挂在哪个节点都可以
来看看脚本的属性吧
在这里插入图片描述
绑定好小提示文字
小提示内容必须有至少两个,如果只有一个会出现错误
勾选自动更新显示内容后会在onload执行一个计时器,每隔几秒就更新一次小提示的内容,这个按需求勾不勾选
不重复显示推荐勾上,勾上后每次更新显示的内容将不再重复,如果小提示内容里的每一个元素都显示过一遍,就不得不重复显示,但也不会出现相邻两次更新内容一样的情况
游戏加载后更新内容也建议勾上,游戏会在加载完成后就更新小提示文字的显示内容

另外,还可以直接调用脚本里的update_content方法更新小提示显示的内容,效果GIF图就是给按钮绑定了update_content方法

技术交流Q群:1130122408
更多内容请关注微信公众号
请添加图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值