用户:
LZ编编编编程猫查看:2 回复:6 评论:2 创建时间:2023-07-22T14:35:30
⚠⚠⚠pro版rtc功能未完善,语音频道内的玩家若退出地图会导致地图下一次运行时崩溃,任何人无法进入!严禁在已发布地图上测试此功能!地图崩溃后果自负!
解决了频道内玩家退出地图导致崩溃的问题,但开麦就会很卡。不知道七七是怎么解决的。。。(async () => {
channel = await rtc.createChannel('channel');
})();
world.onPlayerJoin(async ({ entity }) => {
entity.player.inChannel = false;
entity.player.microphone = false;
entity.player.directMessage('鼠标右键(手机/平板B键)可打开语音设置面板');
});
// 尝试解决频道内玩家退出地图导致崩溃的问题
setInterval(async () => {
await channel.destroy();
world.querySelectorAll('player').filter(entity => entity.player.inChannel).forEach(async (entity) => {
await channel.add(entity);
});
}, 384);
world.onPress(async ({ button, entity }) => {
if (button === GameButtonType.ACTION1) {
let permission = await channel.getMicrophonePermission(entity);
if (!permission) {
entity.player.dialog(({
type: GameDialogType.TEXT,
title: '语音设置',
content: '检测到你已禁止此网页使用你的麦克风,请先允许此功能!',
}));
return;
}
if (!entity.player.inChannel) {
let result = await entity.player.dialog(({
type: GameDialogType.SELECT,
title: '语音设置',
options: ['加入语音频道']
}));
if (!result) {
return;
}
entity.player.inChannel = true;
world.say(entity.player.name + '加入了语音频道!');
return;
}
let result = await entity.player.dialog({
type: GameDialogType.SELECT,
title: '语音设置',
options: [(entity.player.microphone ? '关闭' : '开启') + '麦克风', '设置麦克风音量', '查看语音频道内玩家列表', '退出语音频道']
});
if (!result) return;
switch (result.value) {
case '开启麦克风':
try {
await channel.publishMicrophone(entity);
entity.player.microphone = true;
entity.player.directMessage('已开启麦克风!');
} catch {
entity.player.directMessage('由于语音频道卡顿,开启麦克风失败,请重试!');
}
break;
case '关闭麦克风':
try {
await channel.unpublish(entity);
entity.player.microphone = false;
entity.player.directMessage('已关闭麦克风!');
} catch {
entity.player.directMessage('由于语音频道卡顿,关闭麦克风失败,请重试!');
}
break;
case '设置麦克风音量':
let volume = await channel.getVolume(entity);
let result = await entity.player.dialog({
type: GameDialogType.INPUT,
title: '设置麦克风音量',
content: '你目前的麦克风音量为' + volume,
placeholder: '设置麦克风音量(0~100的整数)'
});
if (!result) {
break;
}
result = +result;
if (!Number.isInteger(result) || result < 0 || result > 100) {
entity.player.directMessage('输入不合法!');
break;
}
await channel.setVolume(entity, result);
entity.player.directMessage('已将麦克风音量设置为' + result);
break;
case '查看语音频道内玩家列表':
let names = world.querySelectorAll('player').filter(entity => entity.player.inChannel).map((entity) => entity.player.name);
entity.player.dialog({
type: GameDialogType.SELECT,
title: '语音频道内玩家列表',
options: names
});
break;
case '退出语音频道':
await channel.remove(entity);
entity.player.inChannel = false;
world.say(entity.player.name + '退出了语音频道!');
break;
default:
break;
}
}
});