【神奇代码岛】给我一分钟,教你在神奇代码岛做一款跑酷游戏

目录

介绍

用模型作为存档点

准备

代码

思路 

用方块作为存档点

准备

代码

思路

最后总结 


介绍

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

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

用模型作为存档点

准备

现在地图中准备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类的属性的变量,是面向所有玩家的,所有玩家都会操控这个变量,也就是说一个创建了一个给玩家的私有变量里面的值只有一个玩家可以拥有。 

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

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

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值