用户:
神岛吉吉喵查看:210 回复:175 评论:210 创建时间:2020-09-12T10:34:54

有萌新跟吉吉喵说,
“哎呀,我不会代码呀😭”
喵喵告诉你
看了这个教程
6岁半以上都能学会
👇👇👇👇👇
(视频链接:https://www.bilibili.com/video/BV1M54y1m7C8/)
视频展示了怎么从0开始
使用常用的Box3 API
创作一个小游戏《围猎公鸡》

实现功能:
- 生成200+会乱跳动的公鸡模型, 公鸡会破坏土地, 但毁不掉最底层的石块
- 玩家移动的轨迹会生成岩浆, 岩浆可以杀伤鸡群并加入计分, 玩家通过围着鸡群跑, 生成一圈岩浆防止它们扩大破坏
- 玩家被公鸡碰到会受伤喵亡, 可以通过聊天命令复活
所用代码如下:
(注意喵是 n c)
console.clear()
var DefaultScale = [0.0625,0.0625,0.0625];
var Quat = new Box3Quaternion(0,0,0,1);
var score = 0
function spawn(x,y,z,meshName){
if(world.entityQuota()<=0){return}//如果可分配的实体小于等于0, 就不再创建新的模型
var entity = world.createEntity({
mesh:meshName,//模型名
collides:true,//能碰撞
fixed:false,//固定
gravity:true,//受重力下落
meshScale:DefaultScale,//模型放大倍数
position:[x,y,z],//位置坐标
friction:0.5,//摩擦力
})
entity.enableDamage = true //允许公鸡受伤
entity.onVoxelContact(({x,y,z,voxel})=>{//当公鸡碰到地形方块
//当公鸡落地后, 随机改变移动速度
entity.velocity.y = 0.5 + Math.random()*0.5
entity.velocity.x = (Math.random()-0.5)*0.5
entity.velocity.z = (Math.random()-0.5)*0.5
if(voxel===voxels.id('stone')){//如果公鸡碰到了石头方块, 什么也不发生
}else if(voxel===voxels.id('lava02')){//如果公鸡碰到了岩浆
entity.hurt(40)//公鸡扣40生命
}else{
voxels.setVoxel(x,y,z,'')//公鸡可以破坏其他类型的方块
}
})
entity.onEntityContact(({other})=>{//当公鸡碰到另一个模型实体
if(other.isPlayer){//如果另一个模型实体是玩家
other.hurt(20)//这个玩家扣20生命
}
})
var handler = world.onTick(()=>{//计时循环, 每秒更新16次公鸡的朝向
entity.meshOrientation = Quat.rotateY(Math.atan2(entity.velocity.z,entity.velocity.x))//公鸡朝向自己的移动方向
})
entity.onDie(()=>{//当公鸡喵亡(enitity.hp<=0)
entity.destroy()//删除公鸡实体
score++;
world.say('已经收拾了 '+score+' 只公鸡')
})
entity.onDestroy(()=>{//当公鸡实体被删除
handler.cancel()//取消控制公鸡朝向的计时循环
})
return entity
}
for(var i=0;i<250;i++){//生成 250 只公鸡模型实体
spawn(63,11+i,63,'mesh/公鸡.vb')
}
world.onPlayerJoin(({entity})=>{//当有新玩家进入游戏
entity.enableDamage=true//允许玩家受伤
entity.onVoxelSeparate(({x,y,z,voxel})=>{//玩家离开方块的时候
// spawn(x+0.5,y+1.5,z+0.5,'mesh/公鸡.vb')//在离开的方块留下公鸡模型
voxels.setVoxel(x,y+1,z,'lava02')//岩浆突出到地面
})
})
world.onPlayerLeave(({entity})=>{//当有玩家离开游戏
world.say('恭送 '+entity.player.name)//世界广播
})
world.onChat(({entity, message})=>{//当有玩家在输入框发送消息
if(message==='1'){//如果那名玩家输入的是 1
//让所有实体对你说欢迎
var allEntities = world.querySelectorAll('*');
for(var e of allEntities){
if(e.isPlayer){continue}//如果实体是玩家, 就跳过
e.say('欢迎 '+entity.player.name)
}
}else if(message==='2'){
//让位置在(60,0,60)~(70,120,70)之间的实体对你说欢迎
var foundEntities = world.searchBox(new Box3Bounds3(
new Box3Vector3(60,0,60),
new Box3Vector3(70,120,70),
))
for(var e of foundEntities){
if(e.isPlayer){continue}//如果实体是玩家, 就跳过
e.say('hello '+entity.player.name)
}
}else if(message==='复活'){
entity.hp = entity.maxHp
entity.position.x = 10
entity.position.y = 50
entity.position.z = 10
}
})
world.breakVoxelSound=world.placeVoxelSound=''

打开API文档
了解Box3代码还能做什么
API文档的《World世界》章节样式更新啦!

- 增加了目录
- 样式更美观易读
你喜欢吗?

加入代码岛3.0官方内测Q喵
代码岛3.0官网:box3.codemao.cn