猫史档案馆


每日一个岛3建图小技巧:不用飞也能看到全景地图!

用户:神岛吉吉喵神岛吉吉喵查看:26 回复:32 评论:26 创建时间:2022-01-11T15:24:04


center_image

当你的地图面积非常大时

如何才能快速看到全景、并定位自己所在的位置?

今天这招,就教你们“登高望远”

俯瞰地图全景:

教程代码如下:

// 点击鼠标右键(B),弹出对话框,视线变为俯视
world.onPlayerJoin(({ entity }) => {
    entity.player.onPress(async ({ button }) => {
        if (button == Box3ButtonType.ACTION1) {
            // 将摄像机看向地图中心
            const lookTarget = new Box3Vector3(63, 8, 63);

            // 将摄像机的位置置于地图大概中心处,并往上拉升到y轴150处,确保看到完整的地形
            const lookEye = new Box3Vector3(63, 150, 63);

            // lookUp用来调整相机角度,可以使画面上下左右颠倒。默认值是(0,1,0)
            // 由于视线是俯视,需要确保lookUp与相机视线方向不平行,需修改为(1,0,0)或者(0,0,1)
            const lookUp = new Box3Vector3(1, 0, 0)

            entity.player.dialog({
                type: Box3DialogType.TEXT,
                content: `俯视`,
                lookEye: lookEye,
                lookTarget: lookTarget,
                lookUp: lookUp
            })
        }
    })
})



// 实现多个方向的效果
// 我们生成一个浮在空中的立方体,每个面颜色不同,方便实现6个方向的观察测试。
function cube(sx, sy, sz, xsize, ysize, zsize) {
    var xend = sx + xsize
    var yend = sy + ysize
    var zend = sz + zsize
    for (var x = sx; x < xend; x++) {
        for (var y = sy; y < yend; y++) {
            for (var z = sz; z < zend; z++) {
                if (x === sx) {
                    voxels.setVoxel(x, y, z, 'green_light')
                }
                if (x === xend - 1) {
                    voxels.setVoxel(x, y, z, 'red_light')
                }
                if (y === sy) {
                    voxels.setVoxel(x, y, z, 'black')
                }
                if (y === yend - 1) {
                    voxels.setVoxel(x, y, z, 'white_light')
                }
                if (z === sz) {
                    voxels.setVoxel(x, y, z, 'blue_light')
                }
                if (z === zend - 1) {
                    voxels.setVoxel(x, y, z, 'yellow_light')
                }
            }
        }
    }
}

//在{x:50, y:50, z:50} 位置,建造一个长20格,宽20格,高20格的空心立方体
cube(50, 50, 50, 20, 20, 20)



world.onPlayerJoin(({ entity }) => {
    entity.player.onPress(async ({ button }) => {
        if (button == Box3ButtonType.ACTION0) {
            let loop = true
            // 只要不是选择了退出,都反复让用户选择要看的颜色那一面
            while (loop) {
                let sel = await entity.player.dialog({
                    type: Box3DialogType.SELECT,
                    content: '选择要看的颜色',
                    options: ['黄色', '蓝色', '红色', '绿色', '白色', '黑色', '退出']
                })

                if (sel) {
                    // 初始化相机参数
                    const lookTarget = new Box3Vector3(0, 0, 0)
                    const lookEye = new Box3Vector3(0, 0, 0)
                    const lookUp = new Box3Vector3(0, 1, 0)


                    // 根据选择的颜色,将lookTarget设置为所看颜色面的中心点坐标
                    // 并将lookEye沿着视线拉远距离

                    // z轴视线
                    if (sel.value == '黄色') {
                        lookTarget.set(60, 60, 50)
                        lookEye.set(60, 60, 180)
                    }
                    // z轴视线
                    if (sel.value == '蓝色') {
                        lookTarget.set(60, 60, 50)
                        lookEye.set(60, 60, -60)
                    }
                    // x轴视线
                    if (sel.value == '红色') {
                        lookTarget.set(50, 60, 60)
                        lookEye.set(180, 60, 60)
                    }
                    // x轴视线
                    if (sel.value == '绿色') {
                        lookTarget.set(50, 60, 60)
                        lookEye.set(-60, 60, 60)
                    }
                    // y轴视线俯视
                    if (sel.value == '白色') {
                        lookTarget.set(60, 70, 60)
                        lookEye.set(60, 150, 60)
                        // 相机lookUp与相机视线方向不能平行,需修改为(1,0,0)或者(0,0,1)
                        lookUp.set(1, 0, 0)
                    }
                    // y轴视线仰视
                    if (sel.value == '黑色') {
                        lookTarget.set(60, 70, 60)
                        lookEye.set(60, 10, 60)
                        // 相机lookUp与相机视线方向不能平行,需修改为(1,0,0)或者(0,0,1)
                        lookUp.set(0, 0, 1)
                    }
                    if (sel.value == '退出') {
                        // 用户选择退出,则退出选择界面
                        loop = false
                    } else {

                        // 使用用户选择所对应的参数来设置相机,并弹出对话框
                        await entity.player.dialog({
                            type: Box3DialogType.TEXT,
                            content: `看向${sel.value}面`,
                            lookEye: lookEye,
                            lookTarget: lookTarget,
                            lookUp: lookUp
                        })
                    }
                }
            }
        }
    })
})

学会了这招,还能加入许多不一样的玩法

快去地图里试试吧!

emotion_编程猫_加油

开发API文档:https://docs.box3.codemao.cn/

加入神奇代码岛官方内测Q喵

官网:box3.fun

下面的二维码会扫出来什么呢?( =•ω•= )m

center_image


回复

上一页1 页 / 共 2下一页
fomqfomq

沙发

点赞0


评论


fomqfomq

呼~终于抢到沙发了

点赞0


评论


冬a_夜星源晨冬a_夜星源晨

第三~

点赞0


评论


Stephan轩Stephan轩

抢到了

点赞0


评论


果果1~果果1~

前排

点赞1


评论


浮生awa浮生awa

前排

点赞0


评论


墨染云天墨染云天

imgsrc="https://static.codemao.cn/emoji/codemao/%E7%BC%96%E7%A8%8B%E7%8C%AB_%E7%82%B9%E8%B5%9E.gif"alt="emotion_编程猫_点赞"

点赞0


评论


AlcalaAlcala

前排

点赞0


评论


FML饭米粒FML饭米粒

“定位自己所在的位置”代码呢?

点赞1


评论


想不出来叫什么想不出来叫什么

欸嘿

点赞0


评论


小鹿deer小鹿deer

👍

点赞0


评论


啸着玩。啸着玩。

龙椅

点赞0


评论


该账号已停用该账号已停用

吉吉喵你在逗我吗?

这种效果其实不用几行代码!

//超大地图
 entity.player.cameraMode = "fixed"
entity.player.cameraPosition = new Box3Vector3(126, 320, 126)
entity.player.cameraTarget = new Box3Vector3(127, 0, 127)
//普通地图
 entity.player.cameraMode = "fixed"
entity.player.cameraPosition = new Box3Vector3(63, 160, 63)
entity.player.cameraTarget = new Box3Vector3(64, 0, 64)

关闭效果:

entity.player.cameraMode = "follow"

点赞4


评论


全能代码师全能代码师

吉吉nb!

点赞0


评论


Forzen_SevenForzen_Seven

如果星河也用这个代码,那一开星图视野距离不够就黑屏)

点赞0


评论


萨博GZY萨博GZY

沙发

点赞0


评论


AB骉AlobokAB骉Alobok

pretend to be something

点赞0


评论


浮生awa浮生awa

如果喵家视野距离调低不就出bug了!

点赞0


评论


BXS_asteroidBXS_asteroid

好耶()

点赞1


评论


DDguanDDguan

其实,这串代码用更简单的比喻形容,就是当按下右键,就让你的眼睛移到地图上方,看向下方。如果萌新对坐标不熟悉的话,也可以用模型代替,把模型缩小到看不见就行了。

点赞0


评论


该账号已停用该账号已停用

吉吉喵你在逗我吗?

这种效果其实不用几行代码!

//超大地图
 entity.player.cameraMode = "fixed"
entity.player.cameraPosition = new Box3Vector3(126, 320, 126)
entity.player.cameraTarget = new Box3Vector3(127, 0, 127)
//普通地图
 entity.player.cameraMode = "fixed"
entity.player.cameraPosition = new Box3Vector3(63, 160, 63)
entity.player.cameraTarget = new Box3Vector3(喵, 0, 喵)

关闭效果:

entity.player.cameraMode = "follow"

点赞1


评论


大方的蓝雀nyaR大方的蓝雀nyaR

我想做一个玩家与模型交互,交互后开始俯视,阿吉,教教我怎么做~~

点赞0


评论


IaeaIaea

yyds

点赞0


评论


喵Sans喵Sans

imgsrc="https://static.codemao.cn/emoji/codemao/%E7%BC%96%E7%A8%8B%E7%8C%AB_%E6%90%93%E5%A4%B4.gif"alt="emotion_编程猫_搓头"

点赞0


评论


北极熊xry北极熊xry

// 点击鼠标右键(B),弹出对话框,视线变为俯视
world.onPlayerJoin(({ entity }) => {
    entity.player.onPress(async ({ button }) => {
        if (button == Box3ButtonType.ACTION1) {
            // 将摄像机看向地图中心
            const lookTarget = new Box3Vector3(140, 10, 116);

            // 将摄像机的位置置于地图大概中心处,并往上拉升到y轴150处,确保看到完整的地形
            const lookEye = new Box3Vector3(140, 330, 116);

            // lookUp用来调整相机角度,可以使画面上下左右颠倒。默认值是(0,1,0)
            // 由于视线是俯视,需要确保lookUp与相机视线方向不平行,需修改为(1,0,0)或者(0,0,1)
            const lookUp = new Box3Vector3(1, 0, 0)

            entity.player.dialog({
                type: Box3DialogType.TEXT,
                content: `俯视`,
                lookEye: lookEye,
                lookTarget: lookTarget,
                lookUp: lookUp
            })
        }
    })
})

超大地图适合的代码

点赞1


评论


小树同学小树同学

好家伙

点赞0


评论


南方一霸南方一霸

点赞0


评论


指令者指令者

ddd

点赞0


评论


不死军团XY不死军团XY

我不会则么复制好的代码弄过去

点赞0


评论


超级的不帅超级的不帅

怎么把代码复制到代码岛那里

点赞0


评论