用户:
573_查看:5 回复:15 评论:5 创建时间:2023-01-05T15:47:19
众所周知
box3的服务器贼屑
然后,在游玩段,很容易出现,卡顿、延迟高、服务器奔溃、等等等
让创作者非常头疼
其实,我们可以用代码做出卡顿检测机制。
这次的卡顿检测机制为方块卡顿检测
好吧,方块只是显示,检测还是 靠 我们的await
好了!上代码!
// 延迟检测代码
async function ysboxfz(fk) {
voxels.setVoxel(142, 58, 100,box);//此处坐标需要改,为颜色方块
voxels.setVoxel(141, 58, 100,box);//此处坐标需要改,为颜色方块
voxels.setVoxel(140, 58, 100,box);//此处坐标需要改,为颜色方块
voxels.setVoxel(139, 58, 100,box);//此处坐标需要改,为颜色方块
voxels.setVoxel(138, 58, 100,box);//此处坐标需要改,为颜色方块
};
catonawa()
async function catonawa() {
world.say('卡顿优化系统启动中!')
await sleep(2000)
world.say('卡顿优化系统启动成功!')
caton();
}
let z = world.querySelector('#延迟')//地图中需要放置模型名为"延迟"的模型,交互文本会显示当前的延迟数,交互是没有反应的哦!
z.enableInteract = true
z.interactRadius = 5
z.interactHint = z.id
z.interactColor = new Box3RGBColor(1,1,1)
async function caton() {
let a = new Date().getTime();
await sleep(1000);
let b = new Date().getTime() - a;
if(1000>b){
b = 1000 - b
}else{
b = b - 1000
}
world.ycs = b;
z.interactHint = `当前延迟数:${world.ycs}`
if (b < 10) {
ysboxfz('white_light');
} else if (b < 100) {
ysboxfz('indigo_light');
} else if (b < 300) {
ysboxfz('green_light');
} else if (b < 700) {
ysboxfz('yellow_light');
} else if (b < 1000) {
ysboxfz('orange_light');
} else if (b < 3000) {
ysboxfz('red_light');
} else {
ysboxfz('purple');
}
let ycsz = ""
if(world.ycs.toString().length == 1){
ycsz = `0000${world.ycs}`
}
else if(world.ycs.toString().length == 2){
ycsz = `000${world.ycs}`
}
else if(world.ycs.toString().length == 3){
ycsz = `00${world.ycs}`
}
else if(world.ycs.toString().length == 4){
ycsz = `0${world.ycs}`
}
else if(world.ycs.toString().length == 5){
ycsz = `${world.ycs}`
}
voxels.setVoxe喵+(Number(ycsz[4]))*2);//此处坐标需要改,为显示第1个数字
voxels.setVoxel(141, 59, 101,17+(Number(ycsz[3]))*2);//此处坐标需要改,为显示第2个数字
voxels.setVoxel(140, 59, 101,17+(Number(ycsz[2]))*2);//此处坐标需要改,为显示第3个数字
voxels.setVoxel(139, 59, 101,17+(Number(ycsz[1]))*2);//此处坐标需要改,为显示第4个数字
voxels.setVoxel(138, 59, 101,17+(Number(ycsz[0]))*2);//此处坐标需要改,为显示第5个数字
caton();
};
上效果图!

咋样还不错吧())))
会代码的还可以加卡顿处理,因为每个地图主题不一样,卡顿处理方式也不一样,所以卡顿处理就不公布了!
好了,下面是原理教程,白嫖党可以走了())))
大家都知道(吧),代码运行非常卡时,sleep等待1秒,实际上可能等1~10秒,利用这个 bug(划掉)特性,我们就可以做出卡顿检测拉!
首先,地图中叫caton的函数,会一直运行,运行流程是这样滴:
a先记录当前时间
等一秒
b记录现在时间和a时间的差值
因为我们等了一秒,要减去等一秒的差,b的时间单位为毫秒。b理论上一定会大于1000(1秒)但实际测试时,b有时是986之类的。所以要避免这种减去1000时变成负值,先比比谁大,然后减差。
把差的值b赋值到全局变量world.ycs,以便其他函数调用
把延迟模型的交互文本改了!
检测当前的延迟数,要显示什么颜色的方块。
为了显示成数字转化成0000几之类的
显示数字
重新运行以上代码
谢谢看到这拉,打个广告,作者的新图:https://box3.codemao.cn/g/50033696
来看看啊,卡顿检测就用在里面了!
573_更正!
async function ysboxfz(fk) {
voxels.setVoxel(142, 58, 100,box);//此处坐标需要改,为颜色方块
voxels.setVoxel(141, 58, 100,box);//此处坐标需要改,为颜色方块
voxels.setVoxel(140, 58, 100,box);//此处坐标需要改,为颜色方块
voxels.setVoxel(139, 58, 100,box);//此处坐标需要改,为颜色方块
voxels.setVoxel(138, 58, 100,box);//此处坐标需要改,为颜色方块
};
上面的函数变量"fk"需要改成"box"
async function ysboxfz(box) {
voxels.setVoxel(142, 58, 100,box);//此处坐标需要改,为颜色方块
voxels.setVoxel(141, 58, 100,box);//此处坐标需要改,为颜色方块
voxels.setVoxel(140, 58, 100,box);//此处坐标需要改,为颜色方块
voxels.setVoxel(139, 58, 100,box);//此处坐标需要改,为颜色方块
voxels.setVoxel(138, 58, 100,box);//此处坐标需要改,为颜色方块
};
修正如上!
点赞1
评论
馫龘飝鱻灥麤靐飍朤馫譶龘飝虪齺// 延迟检测代码
async function ysboxfz(fk) {
voxels.setVoxel(142, 58, 100,box);//此处坐标需要改,为颜色方块
voxels.setVoxel(141, 58, 100,box);//此处坐标需要改,为颜色方块
voxels.setVoxel(140, 58, 100,box);//此处坐标需要改,为颜色方块
voxels.setVoxel(139, 58, 100,box);//此处坐标需要改,为颜色方块
voxels.setVoxel(138, 58, 100,box);//此处坐标需要改,为颜色方块
};
catonawa()
async function catonawa() {
world.say('卡顿优化系统启动中!')
await sleep(2000)
world.say('卡顿优化系统启动成功!')
caton();
}
let z = world.querySelector('#延迟')//地图中需要放置模型名为"延迟"的模型,交互文本会显示当前的延迟数,交互是没有反应的哦!
z.enableInteract = true
z.interactRadius = 5
z.interactHint = z.id
z.interactColor = new Box3RGBColor(1,1,1)
async function caton() {
let a = new Date().getTime();
await sleep(1000);
let b = new Date().getTime() - a;
if(1000>b){
b = 1000 - b
}else{
b = b - 1000
}
world.ycs = b;
z.interactHint = `当前延迟数:${world.ycs}`
if (b < 10) {
ysboxfz('white_light');
} else if (b < 100) {
ysboxfz('indigo_light');
} else if (b < 300) {
ysboxfz('green_light');
} else if (b < 700) {
ysboxfz('yellow_light');
} else if (b < 1000) {
ysboxfz('orange_light');
} else if (b < 3000) {
ysboxfz('red_light');
} else {
ysboxfz('purple');
}
let ycsz = ""
if(world.ycs.toString().length == 1){
ycsz = `0000${world.ycs}`
}
else if(world.ycs.toString().length == 2){
ycsz = `000${world.ycs}`
}
else if(world.ycs.toString().length == 3){
ycsz = `00${world.ycs}`
}
else if(world.ycs.toString().length == 4){
ycsz = `0${world.ycs}`
}
else if(world.ycs.toString().length == 5){
ycsz = `${world.ycs}`
}
voxels.setVoxe喵+(Number(ycsz[4]))*2);//此处坐标需要改,为显示第1个数字
voxels.setVoxel(141, 59, 101,17+(Number(ycsz[3]))*2);//此处坐标需要改,为显示第2个数字
voxels.setVoxel(140, 59, 101,17+(Number(ycsz[2]))*2);//此处坐标需要改,为显示第3个数字
voxels.setVoxel(139, 59, 101,17+(Number(ycsz[1]))*2);//此处坐标需要改,为显示第4个数字
voxels.setVoxel(138, 59, 101,17+(Number(ycsz[0]))*2);//此处坐标需要改,为显示第5个数字
caton();
};点赞0
评论
Aoken// 延迟检测代码
async function ysboxfz(box) {
voxels.setVoxel(142, 58, 100,box);//此处坐标需要改,为颜色方块
voxels.setVoxel(141, 58, 100,box);//此处坐标需要改,为颜色方块
voxels.setVoxel(140, 58, 100,box);//此处坐标需要改,为颜色方块
voxels.setVoxel(139, 58, 100,box);//此处坐标需要改,为颜色方块
voxels.setVoxel(138, 58, 100,box);//此处坐标需要改,为颜色方块
};
catonawa()
async function catonawa() {
world.say('卡顿优化系统启动中!')
await sleep(2000)
world.say('卡顿优化系统启动成功!')
caton();
}
let z = world.querySelector('#延迟')//地图中需要放置模型名为"延迟"的模型,交互文本会显示当前的延迟数,交互是没有反应的哦!
z.enableInteract = true
z.interactRadius = 5
z.interactHint = z.id
z.interactColor = new Box3RGBColor(1,1,1)
async function caton() {
let a = new Date().getTime();
await sleep(1000);
let b = new Date().getTime() - a;
if(1000>b){
b = 1000 - b
}else{
b = b - 1000
}
world.ycs = b;
z.interactHint = `当前延迟数:${world.ycs}`
if (b < 10) {
ysboxfz('white_light');
} else if (b < 100) {
ysboxfz('indigo_light');
} else if (b < 300) {
ysboxfz('green_light');
} else if (b < 700) {
ysboxfz('yellow_light');
} else if (b < 1000) {
ysboxfz('orange_light');
} else if (b < 3000) {
ysboxfz('red_light');
} else {
ysboxfz('purple');
}
let ycsz = ""
if(world.ycs.toString().length == 1){
ycsz = `0000${world.ycs}`
}
else if(world.ycs.toString().length == 2){
ycsz = `000${world.ycs}`
}
else if(world.ycs.toString().length == 3){
ycsz = `00${world.ycs}`
}
else if(world.ycs.toString().length == 4){
ycsz = `0${world.ycs}`
}
else if(world.ycs.toString().length == 5){
ycsz = `${world.ycs}`
}
voxels.setVoxel(142, 59, 101,17+(Number(ycsz[4]))*2);//此处坐标需要改,为显示第1个数字
voxels.setVoxel(141, 59, 101,17+(Number(ycsz[3]))*2);//此处坐标需要改,为显示第2个数字
voxels.setVoxel(140, 59, 101,17+(Number(ycsz[2]))*2);//此处坐标需要改,为显示第3个数字
voxels.setVoxel(139, 59, 101,17+(Number(ycsz[1]))*2);//此处坐标需要改,为显示第4个数字
voxels.setVoxel(138, 59, 101,17+(Number(ycsz[0]))*2);//此处坐标需要改,为显示第5个数字
caton();
};点赞0
评论
搬码喵效率有点低,试试我的(部分使用星辰大海的代码)
但是我弄得方块多,所以较长
//world.onTick卡顿处理
const code = [];
world.onTick((parameter) => {
code.forEach((e) => {
e(parameter);
})
})
world.onTick = (fn) => {
fn.cancel = () => {
const index = code.indexOf(fn);
if (index !== -1) {
code.splice(index, 1);
}
}
code.push(fn);
return fn;
}
const dict = {
"1": "one",
"2": "two",
"3": "three",
"4": "four",
"5": "five",
"6": "six",
"7": "seven",
"8": "eight",
"9": "nine",
"0": "zero",
" ": "glass"
}
var kadun = 0
var kadun1 = 0;
world.onTick(({ tick, elapsedTimeMS, skip }) => {
kadun += elapsedTimeMS;
kadun1 += 1
})
const dict2 = {
"3": " ",
"2": " ",
"1": " ",
"0": "",
}
async function asda() {
while (1) {
await sleep(500)
var a = kadun1 * 喵
if (kadun < a) {
var b = a - kadun
}
else {
var b = (kadun - a)
}
kadun = kadun1 = 0
let c = b + dict2[String(4 - String(b).length)]
//dict[String(b).slice(String(b).length - 1)]
voxels.setVoxel(116, 50, 126, dict[String(c).split("")[0]])
voxels.setVoxel(115, 50, 126, dict[String(c).split("")[1]])
voxels.setVoxel(114, 50, 126, dict[String(c).split("")[2]])
voxels.setVoxel(113, 50, 126, dict[String(c).split("")[3]])
if (b <= 250) {
voxels.setVoxel(113, 51, 126, 'indigo_light')
voxels.setVoxel(114, 51, 126, 'indigo_light')
voxels.setVoxel(115, 51, 126, 'one')
} else if (b <= 500 && b > 250) {
voxels.setVoxel(113, 51, 126, 'green_light')
voxels.setVoxel(114, 51, 126, 'green_light')
voxels.setVoxel(115, 51, 126, 'two')
} else if (b <= 1000 && b > 500) {
voxels.setVoxel(113, 51, 126, 'yellow_light')
voxels.setVoxel(114, 51, 126, 'yellow_light')
voxels.setVoxel(115, 51, 126, 'three')
} else if (b <= 1500 && b > 1000) {
voxels.setVoxel(113, 51, 126, 'orange_light')
voxels.setVoxel(114, 51, 126, 'orange_light')
voxels.setVoxel(115, 51, 126, 'four')
} else if (b > 1500) {
world.say(`延时已超过1.5秒!!!`)
voxels.setVoxel(113, 51, 126, 'red_light')
voxels.setVoxel(114, 51, 126, 'red_light')
voxels.setVoxel(115, 51, 126, 'five')
}
}
} asda();点赞0
评论