连接两方块代码
先看效果:
其实代码写起来非常简单,只需要把整个问题看成求函数图像就好了)
无需多言,上代码:
文字版:
function connectVox(startPos,endPos,vox){
var int_x = endPos.x-startPos.x;
var int_z = endPos.z-startPos.z;
var int_y = endPos.y-startPos.y;
if(Math.abs(startPos.x-endPos.x)>=Math.abs(startPos.z-endPos.z) && Math.abs(startPos.x-endPos.x)>=Math.abs(startPos.y-endPos.y)){
var m = int_y/int_x;
var n = startPos.y-m*startPos.x;
var a = int_z/int_x;
var b = startPos.z-a*startPos.x;
for(var x=Math.min(startPos.x,endPos.x);x<Math.max(startPos.x,endPos.x);x++){
var z = x*a+b;
var y = x*m+n;
voxels.setVoxel(x,y,z,vox);
}
}else if(Math.abs(startPos.z-endPos.z)>Math.abs(startPos.x-endPos.x) && Math.abs(startPos.z-endPos.z)>Math.abs(startPos.y-endPos.y)){
var m = int_y/int_z;
var n = startPos.y-m*startPos.z;
var a = int_x/int_z;
var b = startPos.x-a*startPos.z;
for(var z=Math.min(startPos.z,endPos.z);z<Math.max(startPos.z,endPos.z);z++){
var x = z*a+b;
var y = z*m+n;
voxels.setVoxel(x,y,z,vox);
}
}else{
var m = int_z/int_y;
var n = startPos.z-m*startPos.y;
var a = int_x/int_y;
var b = startPos.x-a*startPos.y;
for(var y=Math.min(startPos.y,endPos.y);y<Math.max(startPos.y,endPos.y);y++){
var z = y*a+b;
var x = y*m+n;
voxels.setVoxel(x,y,z,vox);
}
}
}
connectVox(new GameVector3(10,10,10),new GameVector3(30,20,10),'light_blue_grass_all');
(代码太多实在不想写注释,自己琢磨吧)
注:new GameVector3代表这个数组是坐标
评论