首页>文档>iF2D 开发学习手册>01 一切从Scene 开始

此组别内的文章

需要支持?

如果通过文档没办法解决您的问题,请提交工单获取我们的支持!

01 一切从Scene 开始

iF2D的运行,是基于场景(Scene)运行,第一部分,我们也将通过场景,向大家讲解iF2D的场景逻辑与场景状态机。

1.1        iF2D的游戏运行逻辑

iF2D的scene逻辑执行图

01 一切从Scene 开始

游戏开始后,会在底层框架初始化结束后调用脚本的iFActionGameStart的函数。在iFActionGameStart调用中,会生成首个scene。这期间会看到我们iF2D的配属对象IVal,iFActionGameStart中也做了基础的配置部署。

当前,我们只看看IVal.scene = new SStart();这一行语句

为IVal.scene设置需要执行的场景为SStart,设置完毕后,iF2D的状态机,会以每秒60的频次,执行场景中的update函数,以达到刷新场景的目的。

*iF2D只能运行一个scene,如果多次赋值,只执行最后一次scene的状态机

1.2 定义场景

接下来我们来说明一下如何定义一个运行场景。

最基础的场景,只有一个对外公开的update函数。如下

01 一切从Scene 开始

当场景被实例后,由于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")

  }

}

打印内容

a
b
b
b
b
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、理解场景的构建和状态机执行逻辑

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
有新私信 私信列表
搜索