01 一切从Scene 开始
iF2D的运行,是基于场景(Scene)运行,第一部分,我们也将通过场景,向大家讲解iF2D的场景逻辑与场景状态机。
1.1 iF2D的游戏运行逻辑
iF2D的scene逻辑执行图
游戏开始后,会在底层框架初始化结束后调用脚本的iFActionGameStart的函数。在iFActionGameStart调用中,会生成首个scene。这期间会看到我们iF2D的配属对象IVal,iFActionGameStart中也做了基础的配置部署。
当前,我们只看看IVal.scene = new SStart();这一行语句 为IVal.scene设置需要执行的场景为SStart,设置完毕后,iF2D的状态机,会以每秒60的频次,执行场景中的update函数,以达到刷新场景的目的。
*iF2D只能运行一个scene,如果多次赋值,只执行最后一次scene的状态机
1.2 定义场景
接下来我们来说明一下如何定义一个运行场景。 最基础的场景,只有一个对外公开的update函数。如下
当场景被实例后,由于js特性会直接执行A部分的内容,也可以当做构造函数来使用。
当构造结束后。便会以每秒60的频次,执行场景中的update函数,我们也称此为“状态机”。
1.3 实际的场景操作
1.3.1、如果让脚本一开始运行我们自己定义好的场景如前面的studyScene?
前面讲解过底层初始化会执行iFActionGameStart,并且赋值首个scene,那么我们只要修改默认脚本【iFActionGameStart】,找到
- IVal.scene = new SStart();
复制代码改为 - IVal.scene = new studyScene();
复制代码就可以了
1.3.2、在场景的构造部分 log(“a”),然后在状态机中log(“b”),分别会发生什么?为什么?
示例代码
- function studyScene(){
- log("a")
- this.update = function(){
- log("b")
- }
- }
复制代码
打印内容
可能会看到不b
这是因为 a 在构建场景的时候只执行一次,而状态机会每秒60次调用update函数,不断打印b到控制台
1.3.3、如果想要每1秒钟,打印一次 a,应该怎么操作?
示例代码
- function studyScene(){
- var wait = 60;
- this.update = function(){
- if(wait <= 0){
- wait = 60;
- log("a");
- }
- }
- }
复制代码
首先我们知道,状态机是1秒执行60次,所以我们需要定义一个等待时间为60,然后状态机开始执行后,判断等待时间是否为0,如果为0,重新设置等待时间为60,并打印a。条件判断完后减少等待时间。
本章回顾
1、如何定义一个场景
2、如果设置为自己定义的场景
3、理解场景的构建和状态机执行逻辑
|