# 快速制作:第一张跑酷地图


(点击->高清B站视频) (opens new window)


视频中使用的代码如下(写完代码后,需运行才能生效哦):

# 1、生成起点和终点之间的随机跳板

起点坐标<6, 8, 64>,终点坐标<61, 8, 64>

以下跳板代码是根据这2个坐标点刚好对应的距离和坐标生成的,不要错漏了哦~

function initPlatform() {
    // 首先定位到第一块跳板的X坐标(起点的X坐标为6,那么每隔5个坐标生成一个跳板)
    const positionX = 6 + 5
    // 地面的Y坐标是8,那么跳板的Y坐标设置到9,比地面高1个单位,防止替换掉地面方块
    const positionY = 9

    for (let i = 0; i < 10; i++) {
        // 为了随机生成左右两侧的跳板,首先随机出“左”或者“右”的方向
        const direction = Math.random() > 0.5 ? 1 : -1
        // 根据上面得出的方向,以z=64作为参考,向左或向右移动(0-2)个单位 
        const positionZ = 64 + Math.random() * 2 * direction
        // 将以上计算得到的x,y,z坐标作为生成跳板的坐标信息 (每个跳板的x方向坐标间隔5个单位)
        voxels.setVoxel(positionX + i * 5, positionY, positionZ, "rock")
    }
}

initPlatform();

思考: 试试看,如果改变了里面的某一个数值参数,会发生什么?

# 2、设置重生点

// 当玩家进入地图时
world.onPlayerJoin(({ entity }) => {
    // 设置玩家的重生点为 坐标6, 15, 64
    entity.player.spawnPoint = new Box3Vector3(6, 15, 64)
    // 强制玩家重生
    entity.player.forceRespawn()
})

# 3、设置跑酷胜利条件

world.onVoxelContact(async ({ entity, voxel }) => {
    // 将方块id转换名称
    const voxelName = voxels.name(voxel) 
    // 如果方块名称是carpet_08
    if (voxelName === 'carpet_08') {       
        // 给当前玩家弹出窗口 
        await entity.player.dialog({
            type: Box3DialogType.TEXT,
            title: "获胜",
            content: `${entity.player.name},恭喜你通关游戏!`,
        });
        // 将玩家移动到起点
        entity.player.forceRespawn()
    }
})

# 4、清除原有地形

此处代码对应为“大尺寸”空白地图的默认地形

for (let i = 0; i <= 126; i++) {
    for (let j = 0; j <= 126; j++) {
        for (let k = 0; k <= 8; k++) {
            voxels.setVoxel(i, k, j, 0)
        }
    }
}