新年倒计时教程代码
首先祝大家新年快乐!
这次为大家带来的教程是——
新年倒计时!
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!"
或者可以重复放烟花
又或者可以更热闹一点
等等等等……
鼓励大家在这个基础上进行自己的创新呀~
最后, 再次祝大家新年快乐!
我们下期再见~