(注:本教程适用版本为1.9+!)
看了前面三篇,应该对execute也有所了解了。本篇我们讲解如何用execute制作完美的推箱子!
制作部分
第零部分 · 推箱子怎么玩
这个不用我废话了吧……一般人都会玩啊。 箱子会在游戏开始出现在一个地方,你需要把箱子推到终点就行了。 当然箱子碰到“墙”就不能继续往前推了。 |
第一部分 · 实现简单的推“箱子”
我们先拿一个方块来当作“箱子”,这里我使用的是橡树木板。 此时我们既要判断玩家是否在“推箱子”,站在箱子的附近,也要判断箱子的前面是否是一堵墙,此时我们可以使用execute嵌套。 某人:看起来很复杂的样子,实现它需要多少个命令方块? 只需要4个循环型命令方块!(至于没有循环命令方块的版本,只能使用高频了, 就像这样: ![]() 各有什么用呢?其实是控制玩家各从四个方向的推动…… 比如说从前方推动,箱子的z坐标就要增加(因为是竖着推得),而从右边推呢,x坐标就要减少…… 接下来就拿往前方推动做例子吧! 第一层 嵌套(判断箱子是否在玩家面前,也就是玩家是否在推箱子)
第二层(判断箱子前有没有墙,如果没有墙才能接着执行,箱子前也就是玩家前面的前面……) 原理就是判断箱子前是不是空气方块。
(强调:如果使用嵌套,接下来的指令无需再输入“/”!) 接下来就是如何移动方块了。以前我写的推箱子中,貌似是使用两个setblock:“箱子”换成空气,原来的空气换成“箱子”。 不过现在!我想到了一个更好的方法! 它就是 /clone 指令! 某人:怎么可能?clone明明是复制(克隆)好不好?怎么可能是移动呢? 的确clone指令是用来复制的,但是在他的众多参数中,还有一个复制模式! 一般情况下,复制模式是normal(平常的),它能将方块正常复制。但还有一个move(移动)模式,它是将方块“搬”到一个地方,也就是说,复制完了“本体”就会消失!所以指令如下:
那么以上只是一个方向,其他三个方向改一下坐标偏移值就可以了。 附赠效果图: ![]() |
第二部分 · 优化推箱子(新手略过)
有没有发现自己做的跟上面的效果图不一样? 那是因为偏移值太大了。MC中的~偏移值貌似是从方块中心算起的…… 就像这样: ![]() 图中方块中心点离边缘(黑线)有0.5格,我们再把那段代码拿来:
这里我们偏移的值是1格,但是1格实在太大了,只要踩在箱子旁边方块的边缘就可以推动(因为你踩在边缘上,偏移1格后也就是箱子的边缘上,而箱子的边缘也就算作箱子的坐标了。),这很不合理对不对?没事,我们只要 调到多小呢?有几个前提: 1.必须比0.5大,因为0.5连方块的边长的一半都不到。 2.精度不要太大,太多小数数位 所以我们可以改成(这里是完整指令,偏移值我取了x+0.6):
|
第三部分 · 如何判断成功条件
推箱子是怎么判断成功的呢?一般成功都有个终点,当箱子推到那个点上时,就算成功。 这里我以橙色粘土来作终点。依然以往前推为例子。 上一步说到,当往前“推”箱子时,箱子会移动到玩家前的两格,也就是 ~2 ~ ~ ,那么箱子移动后下面的方块不就是 ~2 ~-1 ~ 了吗? 因此,我们使用execute探测,指令如下:
这里要执行的指令可以说一句“你赢了”之类的话,也可以把玩家tp到下一关。 某人:说了这么多,命令方块该怎么放? 依旧是以原来四个命令方块为基础,每个方向各放一个,我是这样放的:
这里使用连锁型命令方块,并带有条件制约模式,目的是实现 |
第四部分 · 如何判断失败条件
上一部分做了成功部分,那么失败条件,就是方块到了墙角,完全动弹不得了(相当于卡关)。 我们有几个方法: ①简便法——在每个墙角地下都放一种方块。 很简便,只要再用几个execute判断就行了,但是我们很容易漏掉几个墙角。 ②繁琐法——利用命令方块自动判断。 虽然麻烦,但是处理方便,只需要几个命令方块。 那么这里还是讲讲②。 推动到墙角有多少种情况呢?墙角都是前面一个,左边或者右边一个,甚至都有,总结,只有两个。 每个方向有两种情况,四个方向4×2=8种情况 所以类似的,我们这样放命令方块(每组多两个,因为每个方向有两情况): ![]() 然后为什么这次不用条件制约呢?因为貌似命令方块只能被其他一个条件制约啊。所以我干脆不用了。 因此这里的连锁型就完全变成了循环型。为什么不用循环型啊?多加红石,占用空间啊…… 指令依旧是使用execute嵌套,因为跟第一部分类似,我就不多讲了。 (注意:这里使用了三层execute嵌套,判断箱子一层,判断墙体两层!) 本处提供向前推的两种情况,请参考!(至于其他方向,我相信你们的实力!)
|
如果你想要制作一个推箱子类的地图,翻页查看偏向地图制作者的教程!
(注:本教程适用版本为1.9+!)
看了前面三篇,应该对execute也有所了解了。本篇我们讲解如何用execute制作完美的推箱子!
看了前面三篇,应该对execute也有所了解了。本篇我们讲解如何用execute制作完美的推箱子!
地图部分
第五部分 · 分出“关卡”
第六部分 · 后续工作
如果你做的推箱子像弄成一个趣味地图的话,不能忘记了关卡这个东西。 我们先做以下步骤: 我们原来是这样的布局: ![]() 我们需要这样(将命令方块分散开,空一格): ![]() 然后在分散开的中间放上条件制约的命令方块: ![]() 为什么呢?因为成功步骤在简单推箱子中我们只需要一个execute嵌套对吧,最后的指令可以写“你赢了”,但是在做地图时,往往不够。你需要将那一关的箱子删除掉,然后将玩家tp到下一关……所以,我们再加一层目的是让指令方块多执行一条指令。 我们将原来判断赢的execute命令方块中“要执行的指令”改成各个方向移除掉箱子方块(因为那一关已经赢了)。 判断输的也一样改成各个方向移除掉箱子方块(因为那一关输了要重新开始,那个箱子就不需要了)。 某人:什么?我还不知道什么各个方向移除箱子方块! 就是你往哪个方向推动了箱子,赢了或者输了,但每次的方向不同,移除箱子方块的坐标偏移也就不同了! 然后我们新加的命令方块要做什么呢?简单说,如果赢了,我们玩下一关;输了,重新这一关。 深奥地,共同点就是都初始化( 那怎么才能根据 关卡值 进入正确关卡呢?这时需要用到虚拟积分计分版,dummy。点我。 创造一个Level计分版: /scoreboard objectives add Level dummy 制作一个根据Level变量进入不同关卡的系统: ![]() 这普通命令方块指令写的是testfor不是execute原因就是没什么好指令执行的,只能靠后面的连锁式(注:接下来的连锁型都使用条件制约,代替比较器的作用) 然后呢?连锁型命令方块里填两个指令:①每一关tp到哪?②每一关箱子放哪? 前面说过,失败会重新开始那一关而不增加Level的值。所以我们只要在有testfor的命令方块上铺红石线,失败了setblock放一个红石块即可重新开始。 (注:重要!还要在红石块放置后执行完关卡系统,清除这个红石块!) 成功通关时,还得增加1 Level值再执行,这个我就不详细说怎么搞了,但是我还是想给出加Level值的指令:
还有一点,例如我做了5关,到了最后一关,赢了,这时Level的值不就是6了吗?再在关卡系统加上一排探测6的,探测到时,处理全图通关。 |
第六部分 · 后续工作
到此为止,地图大半儿做完了,我们还需要: ①地图的出生点,也就是选择可以“开始游戏”、"选关"之类的地方。 ②每一关卡的地图,和创意。仅仅有墙壁和箱子是很无聊的,你可以加入一些有趣的东西。如: 红色粘土,玩家站上去不会失败,但是将箱子推上去会失败重来。 指令类似每一关终点的黄色粘土,这里还是给出向前推的指令:
|
地图下载
拒绝伸手党,严禁转载狗。纯原创,如果好,请给出您的金粒人气!