猫史档案馆


吉吉喵教程练习拓展(交作业)

用户:查看:7 回复:7 评论:7 创建时间:2020-11-08T17:05:50


亚马逊地带:

center_image

center_image

代码:

 

function cylinder(cx,cy,cz,vox,radius,height){
  var xend = cx+radius
  var yend = cy+height
  var zend = cz+radius
  for(var x=cx-radius;x<=xend;x++){
    for(var z=cz-radius;z<=zend;z++){
      var dx = x-cx;
      var dz = z-cz;
      if(Math.round(Math.sqrt(dx*dx+dz*dz))<=radius){
        for(var y=cy;y<yend;y++){
          voxels.setVoxel(x,y,z,vox)
        }
      }
    }
  }
}

for (let i = 0; i < 256; ++i) {     
    for (let j = 0; j < 256; ++j) { 
        for (let y = 0; y < 9; ++y)        
        voxels.setVoxel(i, y, j, 'water')
    } 
}
for (let i = 0; i < 256; ++i) {     
    for (let j = 0; j < 256; ++j) {         
        voxels.setVoxel(i, 0, j, 'sand')
    } 
}
for(var i=0;i<900;i++){ // 300个随机圆柱体构成场景
  let x = Math.random() * 253 // x坐标
  let z = Math.random() * 253 // z坐标
  let h = Math.random() * 21 // 高 0~4
  let r = 2 + Math.random() * 10 //半径 2~7
  cylinder(x,0,z,'dirt',r,h)
}

for(var y=10;y<21;y++){//扫描9~12层的格子
  for(var x=0;x<255;x++){
    for(var z=0;z<255;z++){
      // 如果当前格子不为空而它上面那格是空的, 则表示它是复杂地形的表面 
      if(voxels.getVoxel(x,y,z)!=0 && voxels.getVoxel(x,y+1,z)==0){
        voxels.setVoxel(x,y,z,'grass')// 土块替换成喵地
        
        // 在喵地上以3%的几率生成3种植物的其中一种
        var rnd = Math.random()
        var cx = x+0.5 // 修正到方块中心的x坐标
        var cz = z+0.5 // 修正到方块中心的z坐标
        if(rnd<0.01){
          spawn(cx,y+1,cz,'mesh/树.vb',3+2.5*Math.random())
        }else if(rnd<0.02){
          spawn(cx,y+1,cz,'mesh/花.vb',0.8)
        }else if(rnd<0.03){
          spawn(cx,y+1,cz,'mesh/喵.vb',0.8)
        }
      }
    }
  }
}
for(var x=0;x<255;x++){

    for(var z=0;z<255;z++){
      // 如果当前格子不为空而它上面那格是空的, 则表示它是复杂地形的表面 
      if(voxels.getVoxel(x,9,z)!=0 && voxels.getVoxel(x,y+1,z)==0){
        voxels.setVoxel(x,9,z,'sand')// 土块替换成喵地
    }
   }
}



async function correctY(entity){
  await sleep(1)//entity.bounds需要等到下一个tick才会变成真正的值
  entity.position.y += entity.bounds.y//bounds.y是中心点到模型顶部或底部的距离
}

function spawn(x,y,z,meshName,scale){
  const meshScale = scale/16 //默认模型方块大小倍数为地图方块的1/16
  const entity = world.createEntity({
    mesh:meshName,//模型名
    collides:false,//不能碰撞
    fixed:true,//固定
    gravity:false,// 不受重力影响
    meshScale:[meshScale,meshScale,meshScale],//xyz放大倍数
    position:[x,y,z],//位置坐标
  })
  correctY(entity)
  return entity
}

樱花魔法森林:

center_image

代码:

function cube(sx,sy,sz,x_size,y_size,z_size,vox){
    var ex = sx+x_size                             

    var ey = sy+y_size

    var ez = sz+z_size  

    for(var x=sx;x<ex;x++){

        for(var y=sy;y<ey;y++){

            for(var z=sz;z<ez;z++){

                voxels.setVoxel(x,y,z,vox)

            }

        }

    }

}

cube(1,1,1,125,8,125,'water')
function spawn(x,y,z,meshName,scale){
  const meshScale = scale/16 
  const entity = world.createEntity({
    mesh:meshName,
    collides:false,
    fixed:true,
    gravity:false,
    meshScale:[meshScale,meshScale,meshScale],
    position:[x,y,z],
  })
  correctY(entity)
  return entity
}

for(var i=0;i<800;i++){
  spawn(Math.random()*127,9,Math.random()*127,'mesh/喵.vb',1)
}

for(var i=0;i<50;i++){
  spawn(Math.random()*127,9,Math.random()*127,'mesh/花儿.vb',1)
}

for(var i=0;i<100;i++){
  let tree = spawn(Math.random()*127,9,Math.random()*127,'mesh/樱树.vb',3+3*Math.random())
  tree.collides = true
}

async function correctY(entity){
  await sleep(1)
  entity.position.y += entity.bounds.y
}
function cylinder(cx,cy,cz,vox,radius,height){
  var xend = cx+radius
  var yend = cy+height
  var zend = cz+radius
  for(var x=cx-radius;x<=xend;x++){
    for(var z=cz-radius;z<=zend;z++){
      var dx = x-cx;
      var dz = z-cz;



      if(Math.round(Math.sqrt(dx*dx+dz*dz))<=radius){
        for(var y=cy;y<yend;y++){
          voxels.setVoxel(x,y,z,vox)
        }
      }
    }
  }
}

for (var i = 0; i < 300; i++) { // 300个随机圆柱体构成场景
    let x = Math.random() * 125 // x坐标
    let y = 9 + Math.random() * 20 //y坐标
    let z = Math.random() * 125 // z坐标
    let h = Math.random() * 4 // 高 0~4
    let r = 2 + Math.random() * 5 //半径 2~7
    cylinder(x, y, z, 'stone', r, h)
}

for(var y=9;y<125;y++){//扫描9~12层的格子
  for(var x=0;x<127;x++){
    for(var z=0;z<127;z++){
      // 如果当前格子不为空而它上面那格是空的, 则表示它是复杂地形的表面 
      if(voxels.getVoxel(x,y,z)!=0 && voxels.getVoxel(x,y+1,z)==0){
        voxels.setVoxel(x,y,z,'grass')
                var rnd = Math.random()
        var cx = x+0.5 // 修正到方块中心的x坐标
        var cz = z+0.5 // 修正到方块中心的z坐标
        if(rnd<0.01){

            const ng= spawn(cx,y+1,cz,'mesh/小南瓜2.vb',1)
            ng.meshEmissive=0.1
            ng.meshColor=new Box3RGBAColor(1,1,0,1)
            ng.addTag('南瓜')
        }
        else if (rnd<0.02) {

            spawn(cx,y+1,cz,'mesh/枯树1.vb',0.8)
        } else if (rnd<0.03) {
            spawn(cx,y+1,cz,'mesh/尖刺栏杆1.vb',0.8)
        } else if (rnd<0.04) {
            voxels.setVoxel(cx,y+1,cz,voxels.id('yellow_light'))
        } else if (rnd<0.05) {
            spawn(cx,y+1,cz,'mesh/樱树.vb',0.8)
        }

        


      }
    }
  }
}

async function correctY(entity){
  await sleep(1)//entity.bounds需要等到下一个tick才会变成真正的值
  entity.position.y += entity.bounds.y//bounds.y是中心点到模型顶部或底部的距离
}

function spawn(x,y,z,meshName,scale){
  const meshScale = scale/16 //默认模型方块大小倍数为地图方块的1/16
  const entity = world.createEntity({
    mesh:meshName,//模型名
    collides:false,//不能碰撞
    fixed:true,//固定
    gravity:false,// 不受重力影响
    meshScale:[meshScale,meshScale,meshScale],//xyz放大倍数
    position:[x,y,z],//位置坐标
  })
  if (meshName==='mesh/小南瓜2.vb') {
      voxels.setVoxel(x,y-1,z,voxels.id('yellow_light'))
  }
  correctY(entity)
  return entity
}

抄就抄吧。。。


回复

上一页1 页 / 共 1下一页
开心地小电鼠开心地小电鼠

emotion_编程猫_点赞

点赞0


评论


蓝冰_E蓝冰_E

emotion_编程猫_厉害了

点赞0


评论


帅气的剑杰帅气的剑杰

emotion_编程猫_紧张

点赞0


评论


NomandNomand

emotion_编程猫_冷漠

点赞0


评论


害羞的独角蛛907害羞的独角蛛907

emotion_编程猫_点赞

点赞0


评论


梁水娣梁水娣

谢谢诶

点赞0


评论


学霸8号学霸8号

emotion_编程猫_点赞

点赞0


评论