猫史档案馆


【喵】地图方块压缩代码+解码

用户:FML饭米粒FML饭米粒查看:6 回复:14 评论:6 创建时间:2022-03-14T17:23:34


本算法基于https://shequ.codemao.cn/community/365760研发 压缩:   world.say('开始保存'); letblocks=[]; functionappend(item){ if(blocks.length>0&&blocks[blocks.length-1][0]===item){ blocks[blocks.length-1][1]+=1; }else{ blocks.push([item,1]); }; }; functionforEach(fun){ for(letlofblocks){ for(letx=0;x<l[1];x++){ fun(l[0]); }; }; }; letindex=0; (async()=>{ for(y=0;y<128;y++){ for(x=0;x<128;x++){ for(z=0;z<128;z++){ append(voxels.getVoxel(x,y,z)); index++; if(index%20000==0){ world.say(`保存中${index/128**3*100}%`); }; }; }; }; world.say('保存完毕'); })(); lett=[]; blocks.forEach((i)=>{ t.push([i[0],i[1]]); }); global.saveBlocks=t;   压缩:   world.say('开始解码'); letindex=0; letbolckIndex=0; letblock=saveBlocks[0][0]; letlastIndex=saveBlocks[0][1]; (async()=>{ for(y=0;y<128;y++){ for(x=0;x<128;x++){ for(z=0;z<128;z++){ voxels.setVoxel(x,y,z,block); index++; if(index==lastIndex){ bolckIndex++; lastIndex+=saveBlocks[bolckIndex][1]; block=saveBlocks[bolckIndex][0]; }; if(index%200000==0){ world.say(`解码中${index/128**3*100}%`); } }; }; } })(); world.say('解码完成');   本代码仅限小型(128*128*128)地图,如尝试大型(256*256*256)地图可能有卡爆的风险压缩完成的数据将被储存在saveBlocks变量中,可在JSON.stringify后存入SQL,具体存储方式参见https://shequ.codemao.cn/community/354992数组保存方式


回复

上一页1 页 / 共 1下一页
梁桂琪梁桂琪

world.say('开始保存');letblocks=[];functionappend(item){if(blocks.length>0&&blocks[blocks.length-1][0]===item){blocks[blocks.length-1][1]+=1;}else{blocks.push([item,1]);};};functionforEach(fun){for(letlofblocks){for(letx=0;x<l[1];x++){fun(l[0]);};};};letindex=0;(async()=>{for(y=0;y<128;y++){for(x=0;x<128;x++){for(z=0;z<128;z++){append(voxels.getVoxel(x,y,z));index++;if(index%20000==0){world.say(`保存中${index/128**3*100}%`);};};};};world.say('保存完毕');})();lett=[];blocks.forEach((i)=>{t.push([i[0],i[1]]);});global.saveBlocks=t;压缩:world.say('开始解码');letindex=0;letbolckIndex=0;letblock=saveBlocks[0][0];letlastIndex=saveBlocks[0][1];(async()=>{for(y=0;y<128;y++){for(x=0;x<128;x++){for(z=0;z<128;z++){voxels.setVoxel(x,y,z,block);index++;if(index==lastIndex){bolckIndex++;lastIndex+=saveBlocks[bolckIndex][1];block=saveBlocks[bolckIndex][0];};if(index%200000==0){world.say(`解码中${index/128**3*100}%`);}};};}})();world.say('解码完成');本代码仅限小型(128*128*128)地图,如尝试大型(256*256*256)地图可能有卡爆的风险压缩完成的数据将被储存在saveBlocks变量中,可在JSON.stringify后存入SQL,具体存储方式参见https://shequ.codemao.cn/community/354992数组保存方式

点赞0


评论


AlcalaAlcala

大型不是256*256*256好吗

点赞1


评论


FML饭米粒FML饭米粒

world.say('开始保存');
let blocks = [];
function append(item) {
    if (blocks.length > 0 && blocks[blocks.length - 1][0] === item) {
        blocks[blocks.length - 1][1] += 1;
    }else {
        blocks.push([item, 1]);
    };
};
function forEach(fun) {
    for (let l of blocks) {
        for (let x = 0; x < l[1]; x++) {
            fun(l[0]);
        };
    };
};
let index = 0;
(async () => {
    for (y = 0; y < 128; y++) {
        for (x = 0; x < 128; x++) {
            for (z = 0; z < 128; z++) {
                append(voxels.getVoxel(x, y, z));
                index++;
                if (index % 20000 == 0) {
                    world.say(`保存中${index / 128 ** 3 * 100}%`);
                };
            };
        };
    };
    world.say('保存完毕');
})();
let t = [];
blocks.forEach((i) => {
    t.push([i[0], i[1]]);
});
global.saveBlocks = t;
























world.say('开始解码');
let index = 0;
let bolckIndex = 0;
let block = saveBlocks[0][0];
let lastIndex = saveBlocks[0][1];
(async () => {
    for (y = 0; y < 128; y++) {
        for (x = 0; x < 128; x++) {
            for (z = 0; z < 128; z++) {
                voxels.setVoxel(x, y, z, block);
                index++;
                if (index == lastIndex) {
                    bolckIndex++;
                    lastIndex += saveBlocks[bolckIndex][1];
                    block = saveBlocks[bolckIndex][0];
                };
                if (index % 200000 == 0){
                    world.say(`解码中${index / 128 ** 3 * 100}%`);
                }
            };
        };
    }
})();
world.say('解码完成');

点赞2


评论


灵清帝王吃爆一切厕所灵清帝王吃爆一切厕所

收藏()

点赞0


评论


十殿阎王十殿阎王

嗯,不错

点赞0


评论


CenCen

dddd

点赞0


评论


无极玄天无极玄天

哇坟

点赞0


评论


该账号已停用该账号已停用

进收藏夹里面吃灰去吧()

点赞1


评论


用户_869149用户_869149

夹吃灰emotion_doge

点赞1


评论


ZNS_哪吒ZNS_哪吒

ddd()

点赞0


评论


囧仙_official囧仙_official

我下次看看能不能哈夫曼树压一下(

点赞0


评论


UZUZ

对萌新很不友好啊所以咋将一个地图的某范围内的建筑复制到另一个图

点赞0


评论


调皮的皮皮蟹zsj_调皮的皮皮蟹zsj_

电脑坏了( )

点赞0


评论


虚伪_der_面具虚伪_der_面具

emotion_雷电猴_围观

点赞0


评论