七夕小雨 发表于 2019-7-10 17:38:09

iF2D 开发学习手册(开坑更新中...)

iF2D 开发学习手册

*与API手册一起食用效果最佳
iF2D简介:
iF2D的前身是ES7XA,原意为基于OpenGLES(ES)由七夕小雨(7X)开发 适用于Android(A)的游戏引擎,研发自2013年。后因为可拓展多个平台,从而在2015年重新定义引擎名称为iF2D。目前iF2D使用js脚本语言动态编译运行结果,可直接运行于WEB(Chrome内核浏览器),PC(Window)、Android(原生APK非HTML5应用),iOS(原生IPA非HTML5应用)。
iF2D在PC端使用OpenTK框架,openGL渲染,web端使用html5渲染,Android与iOS使用原生OpenGLES渲染。
使用限制:iF2D引擎为非开源引擎,对外暂时仅容许作为iFAction的底层引擎

快速入门
第一个iF2D实例:
新建一个iFAction工程,打开脚本编辑器
新建一个脚本页,输入如下内容

function STest() {

    var spriteList = [];
    var max = 50;
    var bitmap = RF.LoadBitmap("Graphics/Picture/ifaction.png");
    for(var i = 0 ; i < max ; i++){
      var sp = new ISprite(bitmap);
      sp.x = rand(0,IVal.GWidth);
      sp.y = rand(-IVal.GHeight,0);
      sp.tag = 2 + rand(1,4);
      spriteList.push(sp);
    }

    IAudio.playBGM("Audio/BGM/BGM_castle_1.mp3",80);


    this.update = function(){
      for(var i = 0;i < max ; i++){
               var sp = spriteList;
            sp.y += sp.tag;
            if(sp.y > IVal.GHeight){
                sp.y = rand(-IVal.GHeight,0);
                sp.tag = 2 + rand(1,4);
            }
      }
    };

    this.dispose = function(){

    };

}
修改 iFActionGameStart
第14行改为
IVal.scene = new STest();
看看会发生什么吧~ : )

执行结果:




本章回顾:


试试看将STest中的max改为500,或者5000看看会怎么样的。

七夕小雨 发表于 2019-7-24 18:23:40

01 一切从Scene 开始
static/image/hrline/5.gifstatic/image/hrline/5.gif



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")

}

}

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


页: [1]
查看完整版本: iF2D 开发学习手册(开坑更新中...)