猫史档案馆


【box3】足球场速建代码

用户:小苏打_小苏打_查看:20 回复:18 评论:20 创建时间:2021-08-20T11:33:00


先奉上效果图:

center_image

 

然后是速建代码(注:第6行start代表的是一个坐标(没有用box3Vector3是因为我懒得解析emotion_doge)):

/****
 * project-2
 * 足球场
*/
/* 球场速建 */
const start = [33, 8, 98]; /* 可更改 */
(async function () {
    for (var x = start[0]; x < start[0] + 105; x++) {
        for (var z = start[2]; z < start[2] + 68; z++) {
            voxels.setVoxelId(x, start[1], z, 177);
        }
    }
    for (var xx = 0; xx < 21; xx++) {
        for (var z = start[2]; z <= start[2] + 68; z++) {
            for (var i = 0; i < 5; i++) {
                if (xx % 2) {
                    voxels.setVoxel(xx * 5 + i + start[0], start[1] + 1, z, 'grass');
                } else {
                    voxels.setVoxel(xx * 5 + i + start[0], start[1] + 1, z, 'dark_grass');
                }
            }
            await sleep(3);
        }
    }





    for (var i = start[2]; i < start[2] + 68; i++) { voxels.setVoxel(start[0], start[1] + 1, i, 'white'); }
    for (var i = start[2]; i < start[2] + 68; i++) { voxels.setVoxel(start[0] + 105, start[1] + 1, i, 'white'); }
    for (var i = start[0]; i < start[0] + 105; i++) { voxels.setVoxel(i, start[1] + 1, start[2], 'white'); }
    for (var i = start[0]; i < start[0] + 105; i++) { voxels.setVoxel(i, start[1] + 1, start[2] + 68, 'white'); }





    voxels.setVoxel(start[0], start[1] + 2, start[2] + 30, 'white');
    voxels.setVoxel(start[0], start[1] + 2, start[2] + 31, 'spiderweb');
    voxels.setVoxel(start[0], start[1] + 2, start[2] + 32, 'spiderweb');
    voxels.setVoxel(start[0], start[1] + 2, start[2] + 33, 'spiderweb');
    voxels.setVoxel(start[0], start[1] + 2, start[2] + 34, 'spiderweb');
    voxels.setVoxel(start[0], start[1] + 2, start[2] + 35, 'spiderweb');
    voxels.setVoxel(start[0], start[1] + 2, start[2] + 36, 'white');



    voxels.setVoxel(start[0] + 1, start[1] + 2, start[2] + 30, 'spiderweb');
    voxels.setVoxel(start[0] + 1, start[1] + 2, start[2] + 36, 'spiderweb');

    voxels.setVoxel(start[0] + 1, start[1] + 3, start[2] + 30, 'white');
    voxels.setVoxel(start[0] + 1, start[1] + 3, start[2] + 31, 'spiderweb');
    voxels.setVoxel(start[0] + 1, start[1] + 3, start[2] + 32, 'spiderweb');
    voxels.setVoxel(start[0] + 1, start[1] + 3, start[2] + 33, 'spiderweb');
    voxels.setVoxel(start[0] + 1, start[1] + 3, start[2] + 34, 'spiderweb');
    voxels.setVoxel(start[0] + 1, start[1] + 3, start[2] + 35, 'spiderweb');
    voxels.setVoxel(start[0] + 1, start[1] + 3, start[2] + 36, 'white');



    voxels.setVoxel(start[0] + 2, start[1] + 2, start[2] + 30, 'spiderweb');
    voxels.setVoxel(start[0] + 2, start[1] + 2, start[2] + 36, 'spiderweb');
    voxels.setVoxel(start[0] + 2, start[1] + 3, start[2] + 30, 'spiderweb');
    voxels.setVoxel(start[0] + 2, start[1] + 3, start[2] + 36, 'spiderweb');

    voxels.setVoxel(start[0] + 2, start[1] + 4, start[2] + 30, 'white');
    voxels.setVoxel(start[0] + 2, start[1] + 4, start[2] + 31, 'spiderweb');
    voxels.setVoxel(start[0] + 2, start[1] + 4, start[2] + 32, 'spiderweb');
    voxels.setVoxel(start[0] + 2, start[1] + 4, start[2] + 33, 'spiderweb');
    voxels.setVoxel(start[0] + 2, start[1] + 4, start[2] + 34, 'spiderweb');
    voxels.setVoxel(start[0] + 2, start[1] + 4, start[2] + 35, 'spiderweb');
    voxels.setVoxel(start[0] + 2, start[1] + 4, start[2] + 36, 'white');


    voxels.setVoxel(start[0] + 3, start[1] + 2, start[2] + 30, 'spiderweb');
    voxels.setVoxel(start[0] + 3, start[1] + 2, start[2] + 36, 'spiderweb');
    voxels.setVoxel(start[0] + 3, start[1] + 3, start[2] + 30, 'spiderweb');
    voxels.setVoxel(start[0] + 3, start[1] + 3, start[2] + 36, 'spiderweb');
    voxels.setVoxel(start[0] + 3, start[1] + 4, start[2] + 30, 'spiderweb');
    voxels.setVoxel(start[0] + 3, start[1] + 4, start[2] + 36, 'spiderweb');

    voxels.setVoxel(start[0] + 3, start[1] + 5, start[2] + 30, 'white');
    voxels.setVoxel(start[0] + 3, start[1] + 5, start[2] + 31, 'spiderweb');
    voxels.setVoxel(start[0] + 3, start[1] + 5, start[2] + 32, 'spiderweb');
    voxels.setVoxel(start[0] + 3, start[1] + 5, start[2] + 33, 'spiderweb');
    voxels.setVoxel(start[0] + 3, start[1] + 5, start[2] + 34, 'spiderweb');
    voxels.setVoxel(start[0] + 3, start[1] + 5, start[2] + 35, 'spiderweb');
    voxels.setVoxel(start[0] + 3, start[1] + 5, start[2] + 36, 'white');



    voxels.setVoxel(start[0] + 4, start[1] + 2, start[2] + 30, 'white');
    voxels.setVoxel(start[0] + 4, start[1] + 2, start[2] + 36, 'white');
    voxels.setVoxel(start[0] + 4, start[1] + 3, start[2] + 30, 'white');
    voxels.setVoxel(start[0] + 4, start[1] + 3, start[2] + 36, 'white');
    voxels.setVoxel(start[0] + 4, start[1] + 4, start[2] + 30, 'white');
    voxels.setVoxel(start[0] + 4, start[1] + 4, start[2] + 36, 'white');
    voxels.setVoxel(start[0] + 4, start[1] + 5, start[2] + 30, 'white');
    voxels.setVoxel(start[0] + 4, start[1] + 5, start[2] + 36, 'white');

    voxels.setVoxel(start[0] + 4, start[1] + 5, start[2] + 30, 'white');
    voxels.setVoxel(start[0] + 4, start[1] + 5, start[2] + 31, 'white');
    voxels.setVoxel(start[0] + 4, start[1] + 5, start[2] + 32, 'white');
    voxels.setVoxel(start[0] + 4, start[1] + 5, start[2] + 33, 'white');
    voxels.setVoxel(start[0] + 4, start[1] + 5, start[2] + 34, 'white');
    voxels.setVoxel(start[0] + 4, start[1] + 5, start[2] + 35, 'white');
    voxels.setVoxel(start[0] + 4, start[1] + 5, start[2] + 36, 'white');




    /*球门2 */
    voxels.setVoxel(start[0] + 105, start[1] + 2, start[2] + 30, 'white');
    voxels.setVoxel(start[0] + 105, start[1] + 2, start[2] + 31, 'spiderweb');
    voxels.setVoxel(start[0] + 105, start[1] + 2, start[2] + 32, 'spiderweb');
    voxels.setVoxel(start[0] + 105, start[1] + 2, start[2] + 33, 'spiderweb');
    voxels.setVoxel(start[0] + 105, start[1] + 2, start[2] + 34, 'spiderweb');
    voxels.setVoxel(start[0] + 105, start[1] + 2, start[2] + 35, 'spiderweb');
    voxels.setVoxel(start[0] + 105, start[1] + 2, start[2] + 36, 'white');



    voxels.setVoxel(start[0] + 104, start[1] + 2, start[2] + 30, 'spiderweb');
    voxels.setVoxel(start[0] + 104, start[1] + 2, start[2] + 36, 'spiderweb');

    voxels.setVoxel(start[0] + 104, start[1] + 3, start[2] + 30, 'white');
    voxels.setVoxel(start[0] + 104, start[1] + 3, start[2] + 31, 'spiderweb');
    voxels.setVoxel(start[0] + 104, start[1] + 3, start[2] + 32, 'spiderweb');
    voxels.setVoxel(start[0] + 104, start[1] + 3, start[2] + 33, 'spiderweb');
    voxels.setVoxel(start[0] + 104, start[1] + 3, start[2] + 34, 'spiderweb');
    voxels.setVoxel(start[0] + 104, start[1] + 3, start[2] + 35, 'spiderweb');
    voxels.setVoxel(start[0] + 104, start[1] + 3, start[2] + 36, 'white');



    voxels.setVoxel(start[0] + 103, start[1] + 2, start[2] + 30, 'spiderweb');
    voxels.setVoxel(start[0] + 103, start[1] + 2, start[2] + 36, 'spiderweb');
    voxels.setVoxel(start[0] + 103, start[1] + 3, start[2] + 30, 'spiderweb');
    voxels.setVoxel(start[0] + 103, start[1] + 3, start[2] + 36, 'spiderweb');

    voxels.setVoxel(start[0] + 103, start[1] + 4, start[2] + 30, 'white');
    voxels.setVoxel(start[0] + 103, start[1] + 4, start[2] + 31, 'spiderweb');
    voxels.setVoxel(start[0] + 103, start[1] + 4, start[2] + 32, 'spiderweb');
    voxels.setVoxel(start[0] + 103, start[1] + 4, start[2] + 33, 'spiderweb');
    voxels.setVoxel(start[0] + 103, start[1] + 4, start[2] + 34, 'spiderweb');
    voxels.setVoxel(start[0] + 103, start[1] + 4, start[2] + 35, 'spiderweb');
    voxels.setVoxel(start[0] + 103, start[1] + 4, start[2] + 36, 'white');


    voxels.setVoxel(start[0] + 102, start[1] + 2, start[2] + 30, 'spiderweb');
    voxels.setVoxel(start[0] + 102, start[1] + 2, start[2] + 36, 'spiderweb');
    voxels.setVoxel(start[0] + 102, start[1] + 3, start[2] + 30, 'spiderweb');
    voxels.setVoxel(start[0] + 102, start[1] + 3, start[2] + 36, 'spiderweb');
    voxels.setVoxel(start[0] + 102, start[1] + 4, start[2] + 30, 'spiderweb');
    voxels.setVoxel(start[0] + 102, start[1] + 4, start[2] + 36, 'spiderweb');

    voxels.setVoxel(start[0] + 102, start[1] + 5, start[2] + 30, 'white');
    voxels.setVoxel(start[0] + 102, start[1] + 5, start[2] + 31, 'spiderweb');
    voxels.setVoxel(start[0] + 102, start[1] + 5, start[2] + 32, 'spiderweb');
    voxels.setVoxel(start[0] + 102, start[1] + 5, start[2] + 33, 'spiderweb');
    voxels.setVoxel(start[0] + 102, start[1] + 5, start[2] + 34, 'spiderweb');
    voxels.setVoxel(start[0] + 102, start[1] + 5, start[2] + 35, 'spiderweb');
    voxels.setVoxel(start[0] + 102, start[1] + 5, start[2] + 36, 'white');



    voxels.setVoxel(start[0] + 101, start[1] + 2, start[2] + 30, 'white');
    voxels.setVoxel(start[0] + 101, start[1] + 2, start[2] + 36, 'white');
    voxels.setVoxel(start[0] + 101, start[1] + 3, start[2] + 30, 'white');
    voxels.setVoxel(start[0] + 101, start[1] + 3, start[2] + 36, 'white');
    voxels.setVoxel(start[0] + 101, start[1] + 4, start[2] + 30, 'white');
    voxels.setVoxel(start[0] + 101, start[1] + 4, start[2] + 36, 'white');
    voxels.setVoxel(start[0] + 101, start[1] + 5, start[2] + 30, 'white');
    voxels.setVoxel(start[0] + 101, start[1] + 5, start[2] + 36, 'white');

    voxels.setVoxel(start[0] + 101, start[1] + 5, start[2] + 30, 'white');
    voxels.setVoxel(start[0] + 101, start[1] + 5, start[2] + 31, 'white');
    voxels.setVoxel(start[0] + 101, start[1] + 5, start[2] + 32, 'white');
    voxels.setVoxel(start[0] + 101, start[1] + 5, start[2] + 33, 'white');
    voxels.setVoxel(start[0] + 101, start[1] + 5, start[2] + 34, 'white');
    voxels.setVoxel(start[0] + 101, start[1] + 5, start[2] + 35, 'white');
    voxels.setVoxel(start[0] + 101, start[1] + 5, start[2] + 36, 'white');


    for (var z = start[2]; z <= start[2] + 68; z++) { voxels.setVoxel(start[0] + 52, start[1] + 1, z, 'white') }

    const origin = new Box3Vector3(start[0] + 52, start[1] + 1, start[2] + 33);
    for (var x = start[0] + 52 - 5; x <= start[0] + 52 + 5; x++) {
        for (var z = start[2] + 33 - 5; z <= start[2] + 33 + 5; z++) {
            if (origin.distance(new Box3Vector3(x, start[1] + 1, z)) >= 4 && origin.distance(new Box3Vector3(x, start[1] + 1, z)) <= 5.5) {
                voxels.setVoxel(x, start[1] + 1, z, 'white');
            }
        }
    }
}());

 

有了足球场,怎么能没有球呢?

踢球代码(注:仅仅是喵可以被踢,点击也好,直接碰撞也罢,具体玩法还是需要各位才华横溢的 甲方(划掉)  代码师自行添加):

/**
 * project-2 p2
 * 足球代码
*/
/* 点击踢球 */
world.onClick(async ({ entity, clicker, distance, raycast }) => {
    if (entity.id != 'ball' || entity.isPlayer) {
        return;
    }
    if (distance >= 5) {
        return;
    }

    entity.velocity.x += raycast.direction.x * (5 - distance) * 0.7;
    entity.velocity.y += 0.05 * raycast.direction.y * (5 - raycast.distance) * 0.5;
    entity.velocity.z += raycast.direction.z * (5 - distance) * 0.7;
})
let rx = 0;
let ry = 0;
let rz = 0;
world.onVoxelContact(({ entity, force }) => {
    if (entity.id != 'ball') {
        return;
    }
    rx += Math.abs(entity.velocity.x * 3);
    ry += Math.abs(entity.velocity.y * 3);
    rz += Math.abs(entity.velocity.z * 3);

    if (force.y > 0.02) {
        entity.velocity.y = force.y * 20;
        entity.velocity.x = force.x * 40;
        entity.velocity.z = force.z * 40;
    }
})
/* 球的旋转 */
world.onTick(async () => {
    world.querySelectorAll('#ball').forEach((entity) => {
        if (entity.velocity.x != 0 || entity.velocity.z != 0) {
            entity.meshOrientation.x = Math.cos(Math.round(entity.velocity.x * 0.05 * 180 / Math.PI));/* 感谢某位无名大佬帮忙完善(小鹰/cm/...) */
            entity.meshOrientation.y = Math.cos(Math.round(entity.velocity.y * 0.05 * 180 / Math.PI));/* 感谢某位无名大佬帮忙完善(小鹰/cm/...) */
            entity.meshOrientation.z = Math.cos(Math.round(entity.velocity.z * 0.05 * 180 / Math.PI));/* 感谢某位无名大佬帮忙完善(小鹰/cm/...) */
        }
    })
})

world.querySelector('#ball').meshScale = new Box3Vector3(1 / 19, 1 / 19, 1 / 19);

(注:须在地图内放置(而不是仅仅在模型文件中存在)一个球,将它命名为 ball,此代码才可生效。最后一行球的缩放比例可以自由更改,但笔者不建议调整至1/16以上)

 

各位大佬不要喷,我只是新手,有错误请指出。


回复

上一页1 页 / 共 1下一页
小苏打_小苏打_

自古~~~沙发~~~~归楼主~~~~~

点赞0


评论


小树同学小树同学

啊啊啊,要是早点发就好了,我足球场昨天已经一个人弄好了,而且还是手动............

点赞1


评论


async_functionasync_function

awa我就是那个代码师甲方()

点赞1


评论


KaNSFKaNSF

awawa

点赞0


评论


小苏打_小苏打_

尝试注入框架

点赞0


评论


小苏打_小苏打_

<button> I am a button </button>

点赞0


评论


小苏打_小苏打_

I am not a button.

I am a frame.

点赞0


评论


发飙的蜗牛a发飙的蜗牛a

哇呀,没想到,你会这个!

点赞0


评论


GZ006GZ006

甲方报到)))

这个代码挺好的,可惜没有禁区)

点赞0


评论


翎with珝翎with珝

超级挖

点赞0


评论


yee剑走天下yee剑走天下

6()

点赞0


评论


raearaea

ddd

点赞0


评论


仙之鹤仙之鹤

我门肯定认识)

点赞0


评论


望柒望柒

我为什么会想到恒光??????????

点赞0


评论


疏桐_疏桐_

挖坟()()

点赞0


评论


小树同学小树同学

挖!

点赞0


评论


Aaa求佛yaAaa求佛ya

emotion_编程猫_加油

点赞0


评论


乐大王乐大王

肝 

点赞0


评论