地图逻辑实例讲解-弹球(进阶)

精华2019/06/25641 浏览游戏开发攻略
- 按照前一个教学的方法,使用弹球这个地图覆盖到一个不用的地图上
- 你可以先试玩下这个地图,利用重力感应左右倾斜控制一个挡板来反弹白色的球,每次成功加一分,漏掉则重来
- 首先这个地图所有的逻辑也是都在逻辑方块中,打开逻辑方块的逻辑面板,点开 启动事件中的 初始设置 方法,下面逐行说明:
1. 第1行开启陀螺仪功能(功能/系统/输入/开启陀螺仪),这样后续陀螺仪才有反应。
1. 第2行使用了一个自定义方法“重置位置和速度”,对于这种在多个地方都会用到的功能,最好定义成一个自定义方法而不是把一堆代码复制一遍。这个自定义方法的功能是将球移动到地图中心,并且给球一个随机的初始速度,这部分的具体步骤解释在下面。
1. 第三行调用的球的关闭物理碰撞功能,因为零件默认都是有碰撞的,如果不关闭我们无法让球按照我们设定的轨迹移动。
- 接下来返回到逻辑面板,查看“每帧循环”事件中的“重力控制挡板”方法,这个方法首先求出地图两个端点的位置,作为挡板可以活动的极限范围,然后读出重力感应的数值(范围[-1,1]),将它限制到[-0.45,0.45]的范围,这样主要稍稍倾斜手机就可以将挡板移动到最大距离而不需要将手机倾斜到垂直的程度,这里要注意下第16行,做了一个插值(功能/向量计算/插值),这个方法的作用是,根据一个范围[0,1]的系数,得到A B两个向量连线中间的点,这个系数取0时结果等于A,取1时结果等于B,取0.5时得到(A+B)*0.5,最后一行将栅栏这个物体移动到计算出来的位置。
- 接下来返回逻辑面板,查看“碰到地图边界反弹”方法,这里变量v是黄色的,说明它是个全局变量,可以被这个逻辑方块的所有方法共用,这里用来记录小球的速度向量,先看第41-43行,这里将小球的坐标加上v,然后将小球移动过去,意思就是每帧小球的位置都移动v的距离,再看13-16行是判断小球在x方向上是否超出地图边界,如果超出了则让v的x分量*-1,也就是反向,实现碰撞后反弹的效果,23-26行也是类似,在z方向判断小球是否需要反弹。而27-40比较特殊,因为这个方向我们需要判断小球是碰到挡板了还是出界了,其中33-37行是判断x方向上,球和挡板的距离小于2.5,认为挡板接住了球,这里调用了一个叫做“加分”的自定义方法,同时这个方法有个叫做add的参数,表示加一分。而38-40行是挡板没有接到球,调用了前面提到过的“重置位置和速度”方法来将球复位,又调用了重置分数方法将分数归零。
- 下面回到逻辑面板,可以看到右侧全局变量分类里面有 score,v两个变量,一个代表当前分数,一个代表球的速度向量,其中分数在“加分”,“重置分数”,“显示分数”几个方法中都有用到,在代码中会标记为黄色以和普通的变量区分
- 接下里点击自定义方法中的重置位置和速度“”,这里面先将球移动到地图中心,然后有个等待1的语句,这里代表运行到这里时,需要过1秒钟才会继续执行下面的语句,而这时其他的逻辑是不受影响的。后面设置速度时使用了随机数来保证每次游戏的体验不同
- 最后为了不让玩家选择战车,点击天空空白处以后,打开上面的关卡设定按钮,将“可选择战车”选项勾掉,这样玩家的战车就不会产生了
11
5