猫史档案馆


这个大家知不知道呢

用户:中國萬歲_青铁迷中國萬歲_青铁迷查看:0 回复:0 评论:0 创建时间:2020-11-20T17:09:09


const checkPoints = []; // 检查点列表
const playerState = {} ; // 用于记录每个玩家的游戏状态
let bestResult = Infinity; // 最佳成绩, 用时越短越好, 所以初始化为无穷大

// 初始化检查点
world.querySelectorAll('.检查点').forEach((entity) => {
    const bounds = getEntityBounds(entity); // 获取检查点的bounds(大小)
    const index = parseInt(entity.id.match(/\d+/)[0]); // 计算检查点的序号
    checkPoints.push({ index, bounds }); // 添加到checkPoints
    entity.destroy(); // 摧毁检查点, 因为我们只需要index和bounds
});
// 根据index从大到小, 给checkPoints排序
checkPoints.sort((a, b) => a.index > b.index ? 1 : -1);

// 每个tick都检查所有玩家是否有经过存档点, 依次经过各个存档点才算跑完一圈
world.onTick(() => {
    const now = new Date().valueOf(); // 获取当前时间的毫秒数
    const players = world.querySelectorAll('player'); // 获取所有玩家
    for (const entity of players) {
        const { name } = entity.player; // 玩家昵称
        const bounds = getEntityBounds(entity); // 玩家范围
        const state = playerState[name]; // 玩家状态
        const next喵 = state.nextCheckPoint; // 下个存档点
        // 如果碰到了起点
        if (checkPoints[0].bounds.intersects(bounds)) {
            // 用户的下个存档点大于最大存档点, 表示跑完一圈了
            if (next喵 === checkPoints.length) {
                const time = (now - state.startTime) / 1000; // 所用时间转换为秒数
                // 判断是否打破记录
                if (time < bestResult) {
                    bestResult = time;
                    world.say(`恭喜@${name}以${time}秒的成绩打破记录!`);
                } else {
                    world.say(`@${name}跑完一圈, 圈速${time}秒.`);
                }    
            } else if (next喵 === 0) {
                // 第一次起跑
                world.say(`恭喜@${name}出发啦!`);
            }
            // 刷新存档点和时间
            state.nextCheckPoint = 1;
            state.startTime = now; 
        } else if (next喵 >= 0 && next喵 < checkPoints.length && checkPoints[next喵].bounds.intersects(bounds)) {
            // 碰到了下个存档点, 存档点+1
            state.nextCheckPoint++;
        }
    }
});


const spawnPoint = world.querySelector('#出生点'); // 获取出生点
const cars = world.querySelectorAll('.车'); // 获取所有车辆
// 销毁存档点和车的实体, 我们只需要mesh数据
spawnPoint.destroy();
cars.forEach((car) => car.destroy());

// 初始化玩家
world.onPlayerJoin(({entity}) => {
    entity.position.copy(spawnPoint.position); // 传送到出生点
    // 添加随机偏移, 避免人多的时候互相碰撞
    const offset = new Box3Vector3(Math.random() - 0.5, Math.random() - 0.5, Math.random() - 0.5);
    entity.position.addEq(offset.scale(3));
    // 设置初始状态
    playerState[entity.player.name] = {
        nextCheckPoint: 0,
        startTime: 0,
    };
    const car = randomPick(cars); // 随机选一辆车
    // 设置mesh
    entity.mesh = car.mesh;
    entity.meshScale = car.meshScale;
    // 调整mesh方向, 旋转180度
    e

这个大家知不知道呢


回复

上一页1 页 / 共 0下一页