用户:
中國萬歲_青铁迷查看: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
这个大家知不知道呢