教你制作小球淘汰赛(2)更完善的设计
第一:淘汰
制作时我们不仅需要小球停留在某关卡,还需要小球进入淘汰区,这就需要添加一个块来制作淘汰区。以下有2种做法:
1. 我的做法(比较容易,但是观赏效果不如第二种):在绿块下方创建红块,如图,写下以下代码(图一为第二关的红线视图,图二为第一关的红线代码
图一

图二

其中r50就是第五十名的位置,排名等会讲,scene.my.marb=49这一句可以省去,是为了检查bug用的
这个代码的效果是让最后一名的小球自由落下到红线上并移到淘汰区
将这个红块在每个关卡依次制作即可
为了保证排名可以正常显示(关卡结束立即显示),可以把这一关的所有物件加上以下一段代码

这样子可以让某一关的小球全部通关后关卡中的东西消失,以让小球更快触碰红线
2. 灰安教主做法(较难,但观赏性强)
制作一个隐藏方块置于两关交界处

代码区写下

其中e.other._M?是判定碰撞的是否为弹珠,e.other.collideset是修改碰撞作用层,可以先不用写。Timetolive=0即为碰撞后消失,下面的vel=[0,25]即为持续上升;
在这种情况下,小球碰到这个块就可以去到淘汰区
但是总不能让这个块一开始就上升吧,所以还要加一个块阻挡
在刚才的块上方添加阻挡块

代码区写下

即可实现自动去到淘汰区的效果
别忘记黏附到背景
第二:排名
这里介绍3种做法,难易等级和观赏效果都是由低到高
第一种:我的做法1(难度:易)
特别简单,不需要把所有淘汰区的位置写出,只需要在每个红线或淘汰区写下
e.other.pos=scene.pos.taotai,
并在终点创建一个传送点写下以下代码,如图

边上的平面向右移,中间创建一个墙,创建的墙上写下每个名次,如上图
这种方法很简单,还可以依次设方框,在oncollide写下text=e.other.materialname,显示每个名次的小球名字,但缺点也很明显,只有在终点才可以看到排名
第二种:我的做法2(难度:中)
1. 在第一关两侧向外移动平面,创建49个方框,注意这些方框的碰撞作用层要不同于背景和关卡,小球的碰撞作用层也要勾选排名的碰撞作用层,分别代表2-50名,如图(我这里上面是预备格,你们可以把小球直接放入第一关的圆环内)并建立2个空隙,大小和小球的半径相同,保证触碰。(为了防止排名摇晃,可以在排名两侧创建两个透明方框贯穿全部关卡,并且把排名的碰撞作用层和透明方框的碰撞作用层同时添加为一个新的碰撞作用层),例如,小球碰撞作用层为A+B,排名为B+C,透明方框为C

2. 创建49个变量分别储存49个排名的位置(此处为scene.my.r2-scene.my.r50为例),尽量在空隙的中间,但是因为排名是不断运动的,所以要在每块排名的update分别写下scene.my.r n =pos+[x,0]其中n为排名,x为需要的位置与排名块的位置的x坐标(第一个数字)的差值通常为负数
举个例子,我的淘汰赛中50名的代码。当然,每个人做的可能插值不同

3. 用上述的红线代码,也就是这个

让所有的红线都能传送到对应的名次
4. 每关的下墙创建一个长条,控制排名的位置

写下以下代码

scene.my.grade判断所相等的那个数是当前关卡编号,例如这条代码就是第二关的
复制长条到所有关卡即可。
特别提醒:两块排名区的所有排名一定要彼此黏附!!!
5. 为了显示排名所对应的球的名字,还要写下下面代码,其中的_b即为是否为小球的判定
_rank即为排名序号

这种做法有一个缺点,就是循迹追踪绘图器无法删除,会影响观感
第三种:灰安做法(难度:高)
与第二种大体思路相同,但可以避免出现上面的问题
1.提前制作49个排名数字,文本框,小球的落点并增加49个超小的小球(透明)

上面是总体样貌结构,下面是小球落点和超小球的位置

3. 在每个超小球里写下以下代码,其中上面一段意思是把超小球的外观和属性改为传送过来的淘汰的小球的属性,并把传送过来的小球删除,后面一段就是把第五十名的位置设为此处(红线或透明淘汰线上写下传送代码以传送到这里)

4. 在文本框的代码区写下以下代码,显示小球的名字并修改碰撞作用层防止干扰其他小球

5. 同上,把所有的排名工具彼此黏附,并延长关卡之间的透明隔板保证排名置于当前关卡
第三:视角跟随
流畅的视角跟随是必不可少的,有2种方法
第一种,如果你已经有可以做到顺着关卡移动的排名了,只需要点击任意一块排名,在选取中勾选视角跟随即可;
第二种,如果你的排名为固定排名,不能跟随关卡移动,可以增加一个视角跟随方块,向右移动右边的平面,在关卡之间添加方框黏附到背景,写下

即可(每关都要)
到现在,一个完美的框架就做好了,只需要再添加关卡内容就可以了
下一节将告诉你们怎么样优化细节,期待你们能做出一个满意的作品!

