用户:
YDS尹子查看:41 回复:38 评论:41 创建时间:2020-08-06T15:54:24

更新内容:
1.没洞了(保证)
2.更圆了
注意事项:
pos是球心位置
r是球半径
block是球材质
var pos=new Box3Vector3(83,20,108);
var r=12;
var block="stone";
for(let i=pos.x-r;i<=pos.x+r;i++){
for(let j=pos.z-r;j<=pos.z+r;j++){
for(let k=pos.y-r;k<=pos.y+r;k++){
if(new Box3Vector3(i,k,j).distance(pos)<=r){
voxels.setVoxel(i,k,j,block);
}
}
}
}
YDS尹子空心球:
var pos=new Box3Vector3(83,20,108);
var r=12;
var block="stone";
for(let i=pos.x-r;i<=pos.x+r;i++){
for(let j=pos.z-r;j<=pos.z+r;j++){
for(let k=pos.y-r;k<=pos.y+r;k++){
if(Math.ceil(new Box3Vector3(i,k,j).distance(pos))==r){
voxels.setVoxel(i,k,j,block);
}
}
}
}
点赞0
评论
//稍加改良做出来的TNT破坏效果
async function sphere(vox, cx, cy, cz, radius){//参数分别是方块、x,y,z和圆的半径
let xend = cx+radius
let yend = cy+radius
let zend = cz+radius
for(let x=cx-radius;x<=xend;x++){
for(let y=cy-radius;y<=yend;y++){
for(let z=cz-radius;z<=zend;z++){
let dx = x-cx;
let dy = y-cy;
let dz = z-cz;
if(Math.round(Math.sqrt(dx*dx+dy*dy+dz*dz)) <= radius){
voxels.setVoxel(x,y,z,vox)
}
}}}
}
world.onPress(async({ button, entity, raycast }) => { //事件
if(button ==='action0'){
const ball =world.createEntity({//放个模型
mesh:"mesh/tnt.vb",
collides:true,
meshScale:[0.06,0.06,0.06],
position:[entity.position.x+raycast.direction.x, entity.position.y+raycast.direction.y, entity.position.z+raycast.direction.z],
})
ball.onVoxelContact(({ x, y, z, voxel }) => {//TNT碰到了方块
sphere('air',ball.position.x,ball.position.y,ball.position.z,3)//造一个空气球
ball.destroy()//删除TNT
});
ball.velocity.x += raycast.direction.x*2; ball.velocity.y += raycast.direction.y*2; ball.velocity.z += raycast.direction.z*2;
}
})点赞1
评论