神奇的代码_神奇代码中精彩镜头

神奇的代码_神奇代码中精彩镜头做一款跑酷游戏,是很多学习编程的人一直都拥有的愿望,包括我在内,毕竟跑酷游戏本来就是一款最基础的游戏,代码师必学

目录

介绍

用模型作为存档点

准备

代码

思路 

用方块作为存档点

准备

代码

思路

最后总结 


介绍

做一款跑酷游戏,是很多学习编程的人一直都拥有的愿望,包括我在内,毕竟跑酷游戏本来就是一款最基础的游戏,代码师必学。

好了,废话不多说,开始。

用模型作为存档点

准备

现在地图中准备3个出身点,两个岩浆地。

神奇的代码_神奇代码中精彩镜头

岩浆名为”lava02” 换成其他的方块也是可以的,或者换成模型也还是可以的。

存档模型的名字如下

存档点-1   存档点-2    存档点-3

但是,当你换成模型之后,代码就不一样了。

代码

地图准备完毕,开始构建代码吧

先是查找所有存档模型

for (const e of world.querySelectorAll("*")){  //查找所有模型
    if (e.id.startsWith("存档点")){   //添加符合条件判断
        e.collides = true;  //开启碰撞
        e.fixed = true;   //定住,防止玩家碰到模型之后将模型推开
        e.onEntityContact(async({other})=>{  //检测但玩家碰到此模型之后就存档
            if (e.position !== other.position.spawnPoint){
                other.player.directMessage("存档成功")  //给玩家发送提示
                other.player.spawnPoint = e.position  //修改玩家的出身点
            }
        })
    }
}

现在找到所有模型之后,就要进行玩家的死亡碰撞判断了。

world.onVoxelContact(({entity,voxel})=>{
    const voxelName = voxels.name(voxel) //将玩家碰到方块赋值给常量voxelName
    if (voxelName == "lava02"){  //检测玩家碰到的模型是否为lava02
        entity.position.copy(entity.player.spawnPoint)  //将玩家移到存档点
    }
})

好了,现在所有代码都写完了,现在看一下所有代码

for (const e of world.querySelectorAll("*")){  //查找所有模型
    if (e.id.startsWith("存档点")){   //添加符合条件判断
        e.collides = true;  //开启碰撞
        e.fixed = true;   //定住,防止玩家碰到模型之后将模型推开
        e.onEntityContact(async({other})=>{  //检测但玩家碰到此模型之后就存档
            if (e.position !== other.position.spawnPoint){
                other.player.directMessage("存档成功")  //给玩家发送提示
                entity.player.spawnPoint = e.position  //修改玩家的出身点
            }
        })
    }
}

world.onVoxelContact(({entity,voxel})=>{
    const voxelName = voxels.name(voxel) //将玩家碰到方块赋值给常量voxelName
    if (voxelName == "lava02"){  //检测玩家碰到的模型是否为lava02
        entity.position.copy(entity.player.spawnPoint)  //将玩家移到存档点
    }
})

思路 

接下来给大家讲解一下思路

神奇的代码_神奇代码中精彩镜头

此时有人就会有疑问,为什么我要将他存在entity.player.spawnPoint()的常量中呢?难道我就不能自己创建一个变量来存储吗?

其实原因很简单,var spawnPoint变量是全局的,是面向所有玩家的

神奇的代码_神奇代码中精彩镜头

用方块作为存档点

准备

神奇的代码_神奇代码中精彩镜头

伤害方块:lava02  存档方块:stone_wall 

代码

world.onVoxelContact(({entity,voxel})=>{
    const voxelName = voxels.name(voxel)
    if(voxelName == "lava02"){ //判断碰到岩浆(碰到名为lava02)
        entity.position.copy(entity.position.spawnPoint)//强制玩家重生  如果为真
    }
    else if (voxelName == "stone_wall"){
        entity.position.spawnPoint = new Box3Vector3(entity.position.x,entity.position.y,entity.position.z)//将玩家的出身点设置为我们碰到名为“stone_wall”这个方块时的位置
    }
})

这么样,是不是非常简单?

思路

 神奇的代码_神奇代码中精彩镜头

最后总结 

创建带有entity类的属性的变量,是只面向单个玩家的,而不会面向多个玩家,而没有带有entity类的属性的变量,是面向所有玩家的,所有玩家都会操控这个变量,也就是说一个创建了一个给玩家的私有变量里面的值只有一个玩家可以拥有。 

注意:伤害方块千万别选择液体,否则程序的效果是不会正常显示出来的!

好了,这节课就到这里了,我们下节课再见!

 神奇的代码_神奇代码中精彩镜头

今天的文章神奇的代码_神奇代码中精彩镜头分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/81545.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注