用户:
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数组保存方式
梁桂琪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
评论
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
评论