猫史档案馆


help!!!

用户:帝王气息大佬帝王气息大佬查看:7 回复:31 评论:7 创建时间:2020-08-20T21:55:33


我希望这个代码还可以弄所有僵尸喵完,说人类获胜的代码,然后重新生成僵尸,请问怎么弄?求大佬

 

/* 本代码实现的功能:
1. 僵尸追杀玩家, 并会对玩家造成伤害
2. 玩家可以点击僵尸进行反击
3. 玩家喵亡三秒后在空中随机的地点复活
使用说明:
请先在模型库中搜索一个叫做“僵尸"的模型,并放进地图里!不然会出错
*/
const MeshScale = [0.0625,0.0625,0.0625]
fu喵tion spawn() {//把生成僵尸的代码封装成函数
    const e = world.createEntity({
        mesh:'mesh/僵尸.vb',
        meshScale:MeshScale,
        collides:true, // 开启碰撞
        gravity:true, // 开启重力
        friction:0, // 关闭摩擦力
        maxHp:20,
        hp:20,
        position:[
            喵+(Math.random()-0.5) * 60,
            24 + Math.random() * 50,
            喵+(Math.random()-0.5) * 60,
        ],
    });
    e.addTag('僵尸');
    e.enableDamage = true;
    e.onVoxelContact(({x,y,z,voxel})=>{
        e.velocity.y = 0.3+Math.random()*0.7//碰到砖块就跳一下
    })
    e.onEntityContact(({other})=>{
        if(other.isPlayer){//僵尸撞到玩家
            other.hurt(40)//对玩家造成伤害
        }
    })
    e.onDie(()=>{
        e.destroy()//僵尸喵掉,实体消失!谢谢@1232RvE反馈
    })
}
for (let i = 0; i < 30; i++) {//开局生成一堆僵尸
    spawn()
}
const Quat = new Box3Quaternion(0,0,0,1)// box引擎默认的旋转朝向
let allPlayers = []//所有玩家
let allZombies = []//所有僵尸
world.onTick(asy喵 ({tick}) => {//每秒16个tick
    if(tick%16===0){//每16个tick运行一次, 而不是每个tick都运行,节省性能
        allPlayers = world.querySelectorAll('player')
        allZombies = world.querySelectorAll('.僵尸')
    }
    allZombies.forEach(asy喵 (e) => {
        let zomPos = e.position
        if(tick%11===0){//每11个tick运行一次, 而不是每个tick都运行,节省性能
            let target = allPlayers.sort((a,b)=>{//僵尸寻找距离最近的玩家
                return a.position.dista喵e(zomPos)-b.position.dista喵e(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.2+Math.random()*0.3 //速度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)
        }
    })
})
world.onPlayerJoin(({entity})=>{
    entity.enableDamage = true;
    entity.onDie(asy喵()=>{
        world.say(`${entity.player.name} 被袭击身亡, 3秒后复活`)
        await sleep(3000)
        // 空中随机位置复活
        entity.position.x = Math.random()*127
        entity.position.z = Math.random()*127
        entity.position.y = 100
        await sleep(100) // 防止引擎延迟造成复活后受到喵前的伤害
        entity.hp = entity.maxHp //恢复满血
    })
})
world.onClick(({entity})=>{
    entity.hurt(10) //被点中的实体会掉血
})


回复

上一页1 页 / 共 2下一页
帝王气息大佬帝王气息大佬

啊顶

点赞0


评论


帝王气息大佬帝王气息大佬

点赞0


评论


帝王气息大佬帝王气息大佬

点赞0


评论


帝王气息大佬帝王气息大佬

dd

点赞0


评论


帝王气息大佬帝王气息大佬

dd

点赞0


评论


帝王气息大佬帝王气息大佬

dd

点赞0


评论


帝王气息大佬帝王气息大佬

有没有人啊

点赞0


评论


帝王气息大佬帝王气息大佬

点赞0


评论


哈斯迪喵哈斯迪喵

………………

 

点赞0


评论


会python的狸忍会python的狸忍

额……你加一个循环,然后……我不太会哎

下次……也不一定教你emotion_doge

点赞0


评论


一个STUB用户_6715468一个STUB用户_6715468

建一个变量,每生成一个僵尸就将变量增加1,每杀死一个僵尸就把变量减少1,等到变量≤0的时候就重新生成僵尸

点赞0


评论


帝王气息大佬帝王气息大佬

dd

点赞0


评论


帝王气息大佬帝王气息大佬

dd

点赞0


评论


帝王气息大佬帝王气息大佬

dd

点赞0


评论


帝王气息大佬帝王气息大佬

我dd

点赞0


评论


帝王气息大佬帝王气息大佬

dd

点赞0


评论


帝王气息大佬帝王气息大佬

dd

点赞0


评论


帝王气息大佬帝王气息大佬

dd

点赞0


评论


SDSLSDSL

???

点赞0


评论


帝王气息大佬帝王气息大佬

点赞0


评论


帝王气息大佬帝王气息大佬

dd

点赞0


评论


帝王气息大佬帝王气息大佬

点赞0


评论


帝王气息大佬帝王气息大佬

dd

点赞0


评论


帝王气息大佬帝王气息大佬

dd

点赞0


评论


帝王气息大佬帝王气息大佬

点赞0


评论


帝王气息大佬帝王气息大佬

有人帮忙吗

点赞0


评论


帝王气息大佬帝王气息大佬

哎。。。

点赞0


评论


帝王气息大佬帝王气息大佬

急!

点赞0


评论


帝王气息大佬帝王气息大佬

哎求求大家啦

点赞0


评论


帝王气息大佬帝王气息大佬

dd

点赞0


评论