猫史档案馆


黑暗战役巫师代码公布!!

用户:阿啊啊啊啊啊伟_ETO阿啊啊啊啊啊伟_ETO查看:0 回复:1 评论:0 创建时间:2021-12-04T10:58:31


最近有一些人问我: weeb你的那个黑暗战役的巫师代码到底是怎么弄的?我在我自己的地图里面都弄不起来。

现在公布源代码,其实就是将官方发的教程改一下,比如说模型的名字改成僵尸就行了。

/* 本代码实现的功能: 1. 僵尸追杀玩家, 并会对玩家造成伤害 2. 玩家可以点击僵尸进行反击 3. 玩家喵三秒后在空中随机的地点复活 使用说明: 请先在模型库中搜索一个叫做“僵尸"的模型,并放进地图里!不然会出错 */ const MeshScale = [0.05,0.05,0.05] function spawn() {//把生成僵尸的代码封装成函数     const e = world.createEntity({         mesh:'mesh/僵尸.vb',         meshScale:MeshScale,         collides:true, // 开启碰撞         gravity:true, // 开启重力         friction:0, // 关闭摩擦力         maxHp:200,         hp:20,         position:[             64+(Math.random()-0.5) * 256,             24 + Math.random() * 256,             64+(Math.random()-0.5) * 256,         ],     });     e.addTag('僵尸');     e.enableDamage = false;     e.onVoxelContact(({x,y,z,voxel})=>{         e.velocity.y = 0.5+Math.random()*0.9//碰到砖块就跳一下     })     e.onEntityContact(({other})=>{         if(other.isPlayer){//僵尸撞到玩家             other.hurt(40)//对玩家造成伤害             world.say(other.player.name+',被巫师勾了性命')         }     })     e.onDie(()=>{         e.destroy()//僵尸喵掉,实体消失!谢谢@1232RvE反馈     }) } for (let i = 0; i < 20; i++) {//开局生成一堆僵尸     spawn() } const Quat = new Box3Quaternion(0,0,0,1)// box引擎默认的旋转朝向 let allPlayers = []//所有玩家 let allZombies = []//所有僵尸 world.onTick(async ({tick}) => {//每秒16个tick     if(tick%16===0){//每16个tick运行一次, 而不是每个tick都运行,节省性能         allPlayers = world.querySelectorAll('player')         allZombies = world.querySelectorAll('.僵尸')     }     allZombies.forEach(async (e) => {         let zomPos = e.position         if(tick%11===0){//每11个tick运行一次, 而不是每个tick都运行,节省性能             let target = allPlayers.sort((a,b)=>{//僵尸寻找距离最近的玩家                 return a.position.distance(zomPos)-b.position.distance(zomPos)             })[0]             if(target){//地图如果还有玩家                 e.target = target//让僵尸记住要追杀的玩家             }         }         if(e.target && !e.target.destroyed){//如果要追杀的玩家还没有离开地图             var direction = e.target.position.sub(zomPos); //僵尸往玩家的方向矢量             var dist = direction.mag() //矢量的长度             var speed = 0.4+Math.random()*0.2 //速度0.2~0.5随机             e.velocity.x = direction.x*speed/dist             e.velocity.z = direction.z*speed/dist             // 让僵尸面向自己的前进方向             var orientation = Quat.rotateY(Math.atan2(e.velocity.z, e.velocity.x))             e.meshOrientation.copy(orientation)         }     }) })


回复

上一页1 页 / 共 1下一页
Architect_fyArchitect_fy

这个太简单了吧

点赞0


评论