用户:
XHXIAIEIN查看:19 回复:34 评论:19 创建时间:2020-06-30T19:50:35
【代码岛3.0 基础教程 】 初学者脚本入门指南(1)
原本这篇文章是一篇非常简单的技术贴
不过最后在发布之前,想了一想,决定还是补充一些基础知识,让更多同学能看得懂。
开始吧
写给脚本初学者的介绍
有许多同学兴高采烈得申请到代码岛3.0权限的时候,在帖子中看到@吉吉喵 帖子是这么说的:
这些词听上去似乎特别香啊“JS萌新秒上手”“自学很简单”“对萌新特别友好”
结果,一打开页面看到这个。。。
还有这个。。。
啊,这。。
全部看不懂啊!怎么办!!太难了!!
英语考试都还没及格呢!(划掉)
于是预算着学习脚本的期望。又打开了几个有附源码的官方范例。。
啊!看到如此工整的代码,实在太优秀了!!忍不住呼出一声:喵
感觉奇怪的知识又增加了!(虽然代码真是一句没有看懂…hhh)
我是谁?我在哪?我在干什么?这是什么东西?
不用怕!
不懂代码只是因为你还不知道它具体会有什么效果而已~
如果你知道它对应是什么东西,很快,就能学会了~
因此,在接触代码之前,最好要知道自己到底要实现什么功能。先在脑海中想象出这个功能是怎样运作的,再去研究如何实现。
举几个社区中的提问帖作为例子:如何知道想要什么效果呢?像这样
有明确的想法,就能有针对性的找到对应的教程、或者查看手册去了解如何实现它。但假如在此之前,还不知道自己想做什么,一上来就去凑别人写的一大段现成的代码,不知道每一句对应的是什么东西,它具体运行了哪些工作,确实是很难学的会。
这不仅是说脚本,假如box3是图形化工具,你是否能做出上面的功能?
应该…是没问题吧(小声 理不直气壮.jpg)
(不过上面这些同学提的问题好像还没有解决哇…没事,后面我一起给大家讲讲吧)
好了,该进入正题了。
代码岛3.0的脚本到底该怎么学?
来,我教你。
我们先打开box3的API文档,也就是它的说明书:https://docs.box3.codemao.cn/
就是这个。
打开之后是不是一脸懵逼!!??
(嗯,我懂你,其实我看到的时候也是一样的懵 :)
哎,既然现在还看不懂,就先不看它了,我们自己玩一下!
回到刚才的问题:
怎么让一个区域里的所有方块消失
其实这问题,应该是许多人刚接触代码岛3.0的同学都想问的。
在box3世界中,[方块]其实是一种特殊的东西,区别于[实体]。
你可以想象成整个代码岛世界是一个巨大的”魔方“。欸,魔方你玩过吧?就是那个大佬拿在手里拧啊拧啊,六面的颜色就还原了那个魔方)x 当然了,魔方不仅只有3x3阶的。而box3代码岛这个甚至可以更大!
你看,初始地图大概就已经有这么大了!!
创建新的工程项目的时候,默认就是一片绿绿的喵原,上面铺满了[方块]。
如果你晚上睡不着觉,就不要去数天上的星星了,不如来代码岛数方块吧。编辑器右上角有只虫子的图标,这是调试模式,打开之后,可以看到鼠标对应的方块位置。走到(0,8,0)的位置开始数吧~
盯着一行从头数到尾,应该是能数出127个方块的!你看,我已经数出来了!(叉腰)
那么问题来了,一行有127格,共有127列,课代表,能不能算一下面积??
有同学会问,你是不是数错啦!上面明明写的是126!!怎么说是127啊??
因为。。。这个是从0开始数的啊!0 1 2 3 4...
懂了吧?方块的坐标位置,是这么计算的。
除了眼前的方块,脚底下也有方块,一共有8层。玩家脚下的这一层是第8层。因为站得高啊!
最顶部的第8层是喵地,第2~7层是泥土,最底下是1层喵。(MC玩家表示这很熟悉)
如果你是一名肝帝,可以直接在编辑器中,切换到【地形】模式,一个个点击方块来放置。但是在游戏运行的时候,要怎么更换方块呢??比如,我不想玩家出生在一片喵原里。能不能换成其他的地形,比如雪地、山脉、蛋糕!
在游戏开始的时候,想把方块全部都去掉,该怎么做?
所以,这就需要用到【脚本】了!
脚本是这样的写,先不用思考里面写的是什么
world.onPlayerJoin(({ entity }) =>
{
for(let x = 0; x<=126; x++){
for(let z = 0; z<=126; z++){
for(let y = 0; y<=8; y++){
voxels.setVoxel(x, y, z, 0);
}}}
});
把这段代码粘贴到【脚本】中,按右上角的黄色运行按钮,看看效果。
发现没有,方块全部没了,但是脚底下没方块,结果角色一直往下跳,无限重生。
所以,接下来我们再来创建自己的方块就可以了。比如,我想把下面铺满【蛋糕】!!蛋糕是哪个方块啊?哦方块的名称叫:”pink_cake”,在这里能看到。
放3层的蛋糕,然后再做大一些,长,宽各有80格!怎么样(应该可以吃上好久了)
这次的脚本是这么写的:
我加上了简单的注释,每一部分大致做了什么东西。而具体的后面再细讲
// 玩家进入游戏的时候
world.onPlayerJoin(({ entity }) =>
{
// 去掉原本的方块
for(let x = 0; x<=126; x++){
for(let z = 0; z<=126; z++){
for(let y = 0; y<=8; y++){
voxels.setVoxel(x, y, z, 0);
}}}
// 自己创建一个蛋糕地形。
for(let x = 0; x<80; x++){
for(let z = 0; z<80; z++){
for(let y = 0; y<3; y++){
voxels.setVoxel(x, y, z, 'pink_cake');
}}}
});
还是一样,复制粘贴进去
看吧,蛋糕岛就建造好了~
看了看,这一篇教程好像写的有点多了。其他内容可以下次再写一篇。如果你喜欢这篇教程,可以留个言说一下~最重要的是,和我说说,能不能看的懂!
最后,留个彩蛋。下一篇教程(如果有的话),就写这个:
//-----------------------------------------------
// 玩家进入游戏的时候
world.onPlayerJoin(({ entity }) =>
{
// 创建地形
createPlatfrom()
// 初始化玩家的属性
player_initialize(entity.player)
world.onTick((tick) => { player_Particle(entity)});
});
function createPlatfrom()
{
// 去掉原本的方块
for(let x = 0; x<=126; x++){
for(let z = 0; z<=126; z++){
for(let y = 0; y<=8; y++){
voxels.setVoxel(x, y, z, 0);
}}}
// 自己创建一个蛋糕地形。
for(let x = 0; x<80; x++){
for(let z = 0; z<80; z++){
for(let y = 0; y<3; y++){
voxels.setVoxel(x, y, z, 'pink_cake');
}}}
}
//-----------------------------------------------
// 初始化玩家的属性
function player_initialize(entity)
{
// 修改玩家位置,并将出生点重新设在这里。
entity.position = new Box3Vector3(40, 2.5, 40)
entity.spawnPoint.copy(entity.position)
// 修改地图边界,玩家位置超出这个范围,就会重生
entity.movementBounds = new Box3Bounds3(
new Box3Vector3(-20, -20, -20), // 下限
new Box3Vector3(100, 20, 100) // 上限
);
// 修改玩家属性,比如移动速度等。
entity.walkSpeed = 0.38 // 最大步行速度。默认0.22
entity.walkAcceleration = 0.42 // 步行加速度。默认0.19
entity.runSpeed = 0.99 // 最大奔跑速度。默认0.4
entity.runAcceleration = 1.45 // 奔跑加速度。默认0.35
entity.jumpSpeedFactor = 0.425 // 跳跃速度。默认0.85
entity.jumpAccelerationFactor = -0.08 // 跳跃加速率。默认0.55
entity.jumpPower = 0.98 // 跳跃力度。默认0.96
entity.doubleJumpPower = 0 // 二段跳力度。默认0.9
entity.enableDoubleJump = false // 是否启用二段跳。默认 true
}
//-----------------------------------------------
// 玩家身上的粒子特效
function player_Particle(entity)
{
// 判断玩家的行走状态
switch (entity.player.walkState) {
// 正在奔跑
case Box喵layerWalkState.RUN:
Object.assign(entity, {
particleRate: 1000,
particleLifetime: 2,
particleSize: [8, 6, 4, 2, 0.5],
particleColor: [
new Box3RGBColor(1,1,0),
new Box3RGBColor(1,1,0),
new Box3RGBColor(1,0,0),
new Box3RGBColor(1,0,0),
new Box3RGBColor(1,1,1),
],
});
break;
// 正在行走
case Box喵layerWalkState.WALK:
Object.assign(entity, {
particleRate: 450,
particleLifetime: 1.75,
particleSize: [2, 0.65, 0.23],
particleColor: [
new Box3RGBColor(0,0,1),
new Box3RGBColor(0,1,1),
new Box3RGBColor(1,1,1),
],
});
break
// 在其他行走状态不显示粒子
default:
Object.assign(entity, {particleRate: 0,particleLifetime: 0 });
}
}
效果是这样的
奔跑时候的身上的火焰拖尾效果
摄像头怎么固定?下次跟你讲!
相关阅读
社区里也有许多不错的教程帖,值得大家去学习的:
加上固定摄像头的完整脚本~
可以直接在新工程里面测试
c喵ole.clear();
//-----------------------------------------------
// 玩家进入游戏的时候
world.onPlayerJoin(({ entity }) =>
{
// 创建地形
create_Platform()
// 初始化玩家的属性
player_initialize(entity.player)
world.onTick((tick) => { player_Particle(entity)});
});
function create_Platform()
{
// 去掉原本的方块
for(let x = 0; x<=126; x++){
for(let z = 0; z<=126; z++){
for(let y = 0; y<=8; y++){
voxels.setVoxel(x, y, z, 0);
}}}
// 自己创建一个蛋糕地形。
for(let x = 0; x<48; x++){
for(let z = 0; z<48; z++){
for(let y = 0; y<3; y++){
voxels.setVoxel(x, y, z, 'pink_cake');
}}}
}
//-----------------------------------------------
// 初始化玩家的属性
function player_initialize(entity)
{
// 修改玩家位置,并将出生点重新设在这里。
entity.position = new Box3Vector3(24, 2.5, 24)
entity.spawnPoint.copy(entity.position)
// 调整玩家摄像头
entity.cameraMode = 'FIXED'; // 摄像机模式
entity.cameraPosition = new Box3Vector3(24, 16, 80); // 摄像机位置
entity.cameraTarget = new Box3Vector3(24, 6, 12); // 摄像机看向什么位置
entity.cameraUp = new Box3Vector3(0, 16, 10); // 摄像机抬头
// 修改玩家属性,比如移动速度等。
entity.walkSpeed = 0.38 // 最大步行速度。默认0.22
entity.walkAcceleration = 0.42 // 步行加速度。默认0.19
entity.runSpeed = 0.99 // 最大奔跑速度。默认0.4
entity.runAcceleration = 1.45 // 奔跑加速度。默认0.35
entity.jumpSpeedFactor = 0.425 // 跳跃速度。默认0.85
entity.jumpAccelerationFactor = -0.08 // 跳跃加速率。默认0.55
entity.jumpPower = 0.98 // 跳跃力度。默认0.96
entity.doubleJumpPower = 0 // 二段跳力度。默认0.9
entity.enableDoubleJump = false // 是否启用二段跳。默认 true
// 修改地图边界,玩家位置超出这个范围,就会重生
entity.movementBounds = new Box3Bounds3(
new Box3Vector3(-30, -20, -30), // 下限
new Box3Vector3(64, 20, 64) // 上限
);
}
//-----------------------------------------------
// 玩家身上的粒子特效
function player_Particle(entity)
{
// 判断玩家的行走状态
switch (entity.player.walkState) {
// 正在奔跑
case Box喵layerWalkState.RUN:
Object.assign(entity, {
particleRate: 1000,
particleLifetime: 2,
particleSize: [8, 6, 4, 2, 0.5],
particleColor: [
new Box3RGBColor(1,1,0),
new Box3RGBColor(1,1,0),
new Box3RGBColor(1,0,0),
new Box3RGBColor(1,0,0),
new Box3RGBColor(1,1,1),
],
});
break;
// 正在行走
case Box喵layerWalkState.WALK:
Object.assign(entity, {
particleRate: 450,
particleLifetime: 1.75,
particleSize: [2, 0.65, 0.23],
particleColor: [
new Box3RGBColor(0,0,1),
new Box3RGBColor(0,1,1),
new Box3RGBColor(1,1,1),
],
});
break
// 在其他行走状态不显示粒子
default:
Object.assign(entity, {particleRate: 0});
}
}点赞2
评论