猫史档案馆


【代码岛3.0代码公布!】僵尸追杀玩家

用户:神岛吉吉喵神岛吉吉喵查看:115 回复:164 评论:115 创建时间:2020-08-18T19:12:39


center_image

今天的《大神在线写代码》

搬砖喵的代码整理好了!

速取!

/* 本代码实现的功能:
1. 僵尸追杀玩家, 并会对玩家造成伤害
2. 玩家可以点击僵尸进行反击
3. 玩家喵亡三秒后在空中随机的地点复活
使用说明:
请先在模型库中搜索一个叫做“僵尸"的模型,并放进地图里!不然会出错
*/
const MeshScale = [0.0625,0.0625,0.0625]
function 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(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.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(async()=>{
        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) //被点中的实体会掉血
})

注意:

因为屏蔽词

请注意对照图片

修改正确

center_image

加入代码岛3.0官方内测Q喵

代码岛3.0官网:box3.codemao.cn


回复

上一页1 页 / 共 6下一页
YYJLOVEHZMYYJLOVEHZM

沙发

点赞0


评论


YYJLOVEHZMYYJLOVEHZM

哈哈哈

点赞0


评论


Architect_皮卡awaArchitect_皮卡awa

emotion_编程猫_点赞

点赞0


评论


金钱鼠金钱鼠

前排

点赞0


评论


Architect_皮卡awaArchitect_皮卡awa

emotion_鼓掌

点赞0


评论


1232RvE1232RvE

板凳

点赞0


评论


ZH-Y-QZH-Y-Q

++

点赞0


评论


Architect_皮卡awaArchitect_皮卡awa

6楼

点赞0


评论


Architect_皮卡awaArchitect_皮卡awa

7楼

点赞0


评论


Architect_皮卡awaArchitect_皮卡awa

8楼

点赞0


评论


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

前排

点赞0


评论


Architect_皮卡awaArchitect_皮卡awa

9楼

点赞0


评论


Architect_皮卡awaArchitect_皮卡awa

10楼

点赞0


评论


柚子味儿的糖柚子味儿的糖

热乎

点赞0


评论


神岛吉吉喵神岛吉吉喵

代码有很多个喵

注意修改

emotion_编程猫_溜了溜了

点赞1


评论


F_S_2F_S_2

还以为代码有多难。。。

点赞0


评论


未命名用户015734未命名用户015734

我来了——

点赞0


评论


IUBYIUBY

emotion_编程猫_溜了溜了

点赞0


评论


中二病该吃什么药中二病该吃什么药

原来官方人员也怕屏蔽词啊

点赞0


评论


学霸8号学霸8号

emotion_编程猫_点赞

点赞0


评论


空空空空空空空空空空空空

!!!!!!!!!!

点赞0


评论


Weeb_ETOWeeb_ETO

他人的

点赞0


评论


Architect_皮卡awaArchitect_皮卡awa

/* 本代码实现的功能:
1. 僵尸追杀玩家, 并会对玩家造成伤害
2. 玩家可以点击僵尸进行反击
3. 玩家喵三秒后在空中随机的地点复活
使用说明:
请先在模型库中搜索一个叫做“僵尸"的模型,并放进地图里!不然会出错
*/
const MeshScale = [0.0625,0.0625,0.0625]
fun ction spawn() {//把生成僵尸的代码封装成函数
    const e = world.createEntity({
        mesh:'mesh/僵尸.vb',
        meshScale:MeshScale,
        collides:true, // 开启碰撞
        gravity:true, // 开启重力
        friction:0, // 关闭摩擦力
        maxHp:20,
        hp:20,
        position:[
            64+(Math.random()-0.5) * 60,
            24 + Math.random() * 50,
            64+(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)//对玩家造成伤害
        }
    })
}
for (let i = 0; i < 30; i++) {//开局生成一堆僵尸
    spawn()
}
const Quat = new Box3Quaternion(0,0,0,1)// box引擎默认的旋转朝向
let allPlayers = []//所有玩家
let allZombies = []//所有僵尸
world.onTick(asyn c ({tick}) => {//每秒16个tick
    if(tick%16===0){//每16个tick运行一次, 而不是每个tick都运行,节省性能
        allPlayers = world.querySelectorAll('player')
        allZombies = world.querySelectorAll('.僵尸')
    }
    allZombies.forEach(asyn c (e) => {
        let zomPos = e.position
        if(tick%11===0){//每11个tick运行一次, 而不是每个tick都运行,节省性能
            let target = allPlayers.sort((a,b)=>{//僵尸寻找距离最近的玩家
                return a.position.distan ce(zomPos)-b.position.distan ce(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(asyn c()=>{
        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) //被点中的实体会掉血
})

拿走不谢emotion_doge

注意空格emotion_喵喵

点赞0


评论


花金柔花金柔

前排~

点赞0


评论


JerryLKJJerryLKJ

嗯嗯嗯

点赞0


评论


JerryLKJJerryLKJ

dd

点赞0


评论


1232RvE1232RvE

dd

点赞0


评论


凌_墨水凌_墨水

啊啊啊可恶的喵 真想把所有在代码里的喵 全部都喵了

点赞3


评论


洛亦ly洛亦ly

前排

点赞0


评论


该账号该账号

前排

点赞0


评论