站内搜索

搜索
热搜: 活动 交友 discuz

iFAction 世界需要你的想象力!

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

   关闭

31

主题

304

帖子

1547

积分

管理员

iFAction缔造者

Rank: 22Rank: 22Rank: 22Rank: 22Rank: 22Rank: 22

积分
1547

iFAction学院校长

发表于 2019-7-10 17:38:09 | 显示全部楼层 |阅读模式
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工程,打开脚本编辑器
新建一个脚本页,输入如下内容


  1. function STest() {

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

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


  13.     this.update = function(){
  14.         for(var i = 0;i < max ; i++){
  15.                  var sp = spriteList[i];
  16.             sp.y += sp.tag;
  17.             if(sp.y > IVal.GHeight){
  18.                 sp.y = rand(-IVal.GHeight,0);
  19.                 sp.tag = 2 + rand(1,4);
  20.             }
  21.         }
  22.     };

  23.     this.dispose = function(){

  24.     };

  25. }
复制代码

修改 iFActionGameStart

第14行改为  

  1.   IVal.scene = new STest();
复制代码

看看会发生什么吧~ : )

执行结果:




本章回顾:


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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

评分

参与人数 1金钱 +1 收起 理由
桌游邻客 + 1 很给力!

查看全部评分

31

主题

304

帖子

1547

积分

管理员

iFAction缔造者

Rank: 22Rank: 22Rank: 22Rank: 22Rank: 22Rank: 22

积分
1547

iFAction学院校长

 楼主| 发表于 2019-7-24 18:23:40 | 显示全部楼层
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】,找到

  1. IVal.scene = new SStart();
复制代码
改为
  1. IVal.scene = new studyScene();
复制代码
就可以了

1.3.2、在场景的构造部分 log(“a”),然后在状态机中log(“b”),分别会发生什么?为什么?

示例代码

  1. function studyScene(){

  2.   log("a")

  3.   this.update = function(){

  4.     log("b")

  5.   }

  6. }
复制代码

打印内容
  1. a
  2. b
  3. b
  4. b
  5. b
  6. b
复制代码



可能会看到不b

这是因为 a 在构建场景的时候只执行一次,而状态机会每秒60次调用update函数,不断打印b到控制台

1.3.3、如果想要每1秒钟,打印一次 a,应该怎么操作?

示例代码
  1. function studyScene(){

  2.         var wait = 60;

  3.         this.update = function(){
  4.                 if(wait <= 0){
  5.                         wait = 60;
  6.                         log("a");
  7.                 }
  8.          }
  9. }
复制代码

首先我们知道,状态机是1秒执行60次,所以我们需要定义一个等待时间为60,然后状态机开始执行后,判断等待时间是否为0,如果为0,重新设置等待时间为60,并打印a。条件判断完后减少等待时间。

本章回顾

1、如何定义一个场景
2、如果设置为自己定义的场景
3、理解场景的构建和状态机执行逻辑


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

评分

参与人数 1金钱 +29 收起 理由
桌游邻客 + 29 崔更……

查看全部评分

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

联系我们
QQ群:977585123
iFAction下载
Windows客户端
反馈
意见建议
iFAction

iFAction

京ICP备15053274号-1

Powered by Discuz! X3.4 © 2001-2013 Comsenz Inc.