猫史档案馆


【box3教程】卡顿地图的福音!卡顿检测代码使用教程!

用户:573_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();
};

上效果图!

center_image

咋样还不错吧())))

会代码的还可以加卡顿处理,因为每个地图主题不一样,卡顿处理方式也不一样,所以卡顿处理就不公布了!

好了,下面是原理教程,白嫖党可以走了())))

大家都知道(吧),代码运行非常卡时,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

来看看啊,卡顿检测就用在里面了!


回复

上一页1 页 / 共 1下一页
573_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


评论


AokenAoken

sofa

点赞0


评论


AokenAoken

 

点赞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


评论


AokenAoken

// 延迟检测代码
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


评论


FML饭米粒FML饭米粒

众所周知)

onTick有个属性叫做elapsedTimeMS

So)

没必要这么搞的吧)))

点赞0


评论


LusasLusas

az小维居然也出代码教程了啊(建议改个名字ok?)

点赞0


评论


Coj7Coj7

作者这个代码的确很新颖也的确比较准确,但是作者前面提到“让创作者非常头疼”之后没有给出解决的办法只给出了检测的办法希望作者尽快改进!

点赞0


评论


暗夜极光暗夜极光

喵d

点赞0


评论


墨染云天墨染云天

666

点赞0


评论


骑士之刃骑士之刃

ddd

点赞0


评论


raearaea

ddd

点赞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


评论


KeluoKeluo

用了,卡上加卡(bushi

点赞0


评论


虚伪_der_面具虚伪_der_面具

芜湖!

点赞0


评论