TypeScript模块化相关介绍:https://www.tslang.cn/docs/handbook/modules.html
上一节,我们已经能在控制台输出知道游戏结束,本节继续完善结束后的逻辑。
首先,先在场景中添加一个Sprite节点,这个节点来显示gameOver的图片。
修改MainControl.ts脚本文件
1:修改类名为MainControl。
2:声明一个精灵spGameOver,注意这次没有用@property(cc.Sprite),这样写主要是为了用另外一种方式访问组件。
3:初始化精灵spGameOver,先获取名字为GameOver的节点,然后再通过getComponent接口获取cc.Sprite组件,其实这里只用获取节点就可以了,因为active属性是节点的。active赋值为false就是隐藏该节点。
在结束的时候,把spGameOver精灵显示出来就OK。
但是碰撞响应是在BirdControl模块中触发,怎么能让MainControl模块知道呢?
这就涉及到本节重点:模块化的概念,以及如何引用模块。
在MainControl脚本中添加gameOver函数,函数中的代码就是把spGameOver显示出来。
在BirdControl脚本中添加如上红框框中的内容。
第一块代码:把MainControl模块导入到当前模块。
第二块代码:声明一个MainControl类型的变量(只有写了第一块代码,这里MainControl类型才能被识别)。
第三块代码:获取MainControl脚本组件的引用。
第四块代码:在发生碰撞的时候,利用mainControl脚本引用对象调用gameOver函数,让MainControl模块接收到游戏结束的消息。
保存两个脚本的代码,然后回到CocosCreator运行。
当小鸟和柱子发生碰撞的时候,GameOver的图片显示出来了,但是却被柱子挡住了。
分析:由于柱子是游戏启动之后,动态生成之后加到Canvas节点上的,柱子比GameOver精灵靠后渲染,所以柱子会把GameOver精灵挡住。
创建一个Pipe空节点,并且把Pipe拖拽到GameOver的上面。然后在MainControl脚本修改如上代码,先获取名字为Pipe的节点,把实例化的管子全部加到Pipe节点上去,这样管子就会被GameOver覆盖住。
保存运行,看效果