欢迎光临散文网 会员登陆 & 注册

新年倒计时教程代码

2021-12-31 18:21 作者:-雨木森林-  | 我要投稿

首先祝大家新年快乐!

这次为大家带来的教程是——

新年倒计时

https://www.bilibili.com/video/BV1FS4y1u72e#reply96971070768

这次的代码正好用了80行

简直就和圣诞创作节决赛的规则一样嘛!


好了, 上代码!

// 实体获取
const npc = world.querySelector(".倒数");  // 获取带有标签"倒数"的实体, 由于只有一个, 所以不需要使用world.querySelectorAll()
const firework = world.querySelector('#新年烟花');  // 获取新年烟花实体


// 变量设定
let i = 10;  // 计时变量, 初始值为倒数的时间(秒)


// 倒计时功能, 用一个异步函数表示
(async function(){
    while(true){
        await sleep(1000);
        i -= 1;
        npc.say(`倒数 ${i}`);
        if(i <= 1){  // 这里设为1不设为0, 目的是防止出现"倒数 0"的情况
            Firework();
            break;  // 退出循环
        };
    };
})();


// 烟花功能
function particleSpread(entity, colorList, scale = 1) {
    entity.particleRate = 550//粒子生成速率
    entity.particleLifetime = 2//粒子存活时间为2秒
    entity.particleColor = colorList//粒子的颜色列表
    entity.particleSize = [15 * scale, 10 * scale, 5 * scale, 2 * scale, scale]//粒子在5个阶段的大小
    entity.particleSizeSpread = 2 * scale//粒子的大小的随机变化幅度
    entity.particleVelocitySpread = [20 * scale, 20 * scale, 20 * scale]//粒子XYZ方向速度的随机变化幅度
    entity.particleAcceleration = [0, -10 * scale, 0]//粒子往下飘落模拟重力效果
}

const YELLOW = new Box3RGBColor(10, 10, 2)//黄
const CYAN = new Box3RGBColor(2, 10, 10)//青
const MAGENTA = new Box3RGBColor(10, 2, 10)//品红
const RED = new Box3RGBColor(10, 2, 2)//红
const GREEN = new Box3RGBColor(2, 10, 2)//绿
const BLUE = new Box3RGBColor(2, 2, 10)//蓝
const ColorList = [
    [YELLOW, YELLOW, YELLOW, YELLOW, YELLOW],
    [CYAN, CYAN, CYAN, CYAN, CYAN],
    [MAGENTA, MAGENTA, MAGENTA, MAGENTA, MAGENTA],
    [RED, RED, RED, RED, RED],
    [GREEN, GREEN, GREEN, GREEN, GREEN],
    [BLUE, BLUE, BLUE, BLUE, BLUE],
]

function randomColor() {
    return ColorList[Math.floor(ColorList.length * Math.random())] //随机选取一个颜色列表
}

const MeshScale = [1 / 16, 1 / 16, 1 / 16] //默认的模型缩放系数
async function particleShoot(entity) {
    const fireball = world.createEntity({
        bounds: [0, 0, 0], // 隐形实体默认大小是1x1x1的方块, 现在把它从方块缩成大小为0x0x0的1个点
        collides: false, // 开启碰撞
        gravity: false, // 不受重力影响
        position: entity.position,
    })
    const color = randomColor()//随机颜色
    particleSpread(fireball, color, 0.3) //粒子大小系数缩到0.3, 形成小火球
    await sleep(100) // 等待0.1秒后升空
    fireball.velocity.set(0, 1, 0) // 火球速度为每秒向上1格
    await sleep(2000) //升空2秒后爆炸
    fireball.velocity.set(0, 0, 0) // 火球停止运动
    particleSpread(fireball, color, 1) // 系数增大到1, 让火球变大
    await sleep(1500) //大火球等待1.5秒后消失
    fireball.destroy()
}

async function Firework(){
    var n = 3 //每次
    while (n-- > 0) {
        particleShoot(firework) //在"新年烟花"实体的位置发射烟花
        world.sound("audio/firework.mp3")
        await sleep(2000) //每隔2秒射1发
    }
};

另外, 这只是基础的功能实现

我们还能加上更多效果

比如在倒数完毕后播报"Happy new year!"

或者可以重复放烟花

又或者可以更热闹一点

等等等等……

鼓励大家在这个基础上进行自己的创新呀~

最后, 再次祝大家新年快乐!

我们下期再见~

新年倒计时教程代码的评论 (共 条)

分享到微博请遵守国家法律