erget项目基本流程入门

       本文通过白鹭官方示例程序(一分钟掰弯工厂)为例,初步学习分析一个游戏的基本流程。

       1、加载配置:入口文件为Main.ts,创建任何游戏第一都是要创建stage,在stage创建完成后通过json配置加载资源库,并注册配置加载事件监听:

//初始化Resource资源加载库
//initiate Resource loading library
RES.addEventListener(RES.ResourceEvent.CONFIG_COMPLETE, this.onConfigComplete, this);
RES.loadConfig("resource/default.res.json", "resource/");

从以上代码可以看出,所有的资源配置都挂在resource节点下。

        2、预加载资源:配置加载完成后开始进行资源预加载,首先移除配置加载的事件监听, 同时增加资源组的加载完成事件、加载过程事件以及加载出错的事件监听。此时通常在这里先加载loading组的资源,(注:通过onResourceProgress回调可以获取资源加载进度)。

/**
 * 配置文件加载完成,开始预加载preload资源组。
 * configuration file loading is completed, start to pre-load the preload resource group
 */
private onConfigComplete(event:RES.ResourceEvent):void {
    RES.removeEventListener(RES.ResourceEvent.CONFIG_COMPLETE, this.onConfigComplete, this);
    RES.addEventListener(RES.ResourceEvent.GROUP_COMPLETE, this.onResourceLoadComplete, this);
    RES.addEventListener(RES.ResourceEvent.GROUP_LOAD_ERROR, this.onResourceLoadError, this);
    RES.addEventListener(RES.ResourceEvent.GROUP_PROGRESS, this.onResourceProgress, this);
    RES.addEventListener(RES.ResourceEvent.ITEM_LOAD_ERROR, this.onItemLoadError, this);
    RES.loadGroup("loading");
        
}

        3、资源组加载完成:这时首先完成loading资源组的加载和界面展示,并触发游戏资源组的加载。游戏资源加载完成后移除上一步所有事件监听,创建游戏。

        4、游戏状态管理: 在Game类的init中,项目中通过一个StateManager对象对游戏的三个基本阶段进行注册(登录、游戏中、游戏结束),并设置当前状态为登录:

private init():void
{
    console.log("this is a new game!");
        
    var stateManager:StateManager = new StateManager(this);
        
    stateManager.registerState("pageInfo", new PageInfo());
    stateManager.registerState("pageGame", new PageGame());
    stateManager.registerState("pageOver", new PageOver());
    stateManager.setCurStateName("pageInfo");
    stateManager.startTick();
}

       游戏的状态管理在游戏中非常重要,他将游戏划分为几个不同的状态场景,并控制他们之间的相互切换,保证了不同状态之间的相互独立性。我们进一步来分析这个StateManger类。

        可以看到“一分钟”项目的src目录中,单独为状态和页面建立了两个文件夹,其中pages非常明确,每个ts对应不同的状态页面。接下来仔细阅读一下state的构成。

        StateManager:状态管理类,其中_stateOb实际上是一个状态映射表,StateManager的作用是设置_stateOb,并控制_stateOb的切换;

        StateEvent: 事件类,是状态切换监听的自定义事件类;

        IState:事件派发类,定义了状态类中会触发的几种事件;

        State:状态类,继承egret.DisplayObjectContainer基础类,同时附加IState的接口,对游戏状态及触发的事件进行声明。

        ps:关于状态的切换值得注意,代码中在设置了当前状态(setCurState)中添加状态切换的监听事件,同时移除上一个状态的切换监听事件,这样可以保证只有当前状态可以响应状态切换事件。

        5、游戏开始:PageInfo.ts和PageOver.ts分别是登录页和游戏结束页,都是普通的图片资源加载,没有过多需要分析的地方,重点是PageGame.ts游戏页。

        游戏对象创建时,创建了一个角色管理对象,同时创建了一个角色容器、ui容器、背景角色容器,并获取了音频资源。游戏初始化过程中,主要完成了对角色容器、ui容器、按钮容器三个游戏容器资源的初始化和加载以及背景音乐的播放,并完成了游戏相关的配置(角色队列乱序、等级、难度等);

        游戏进行过程中,通过定时器不断触发tick,一方面用于游戏的倒计时,另一方面完成当前游戏状态的刷新。游戏中每一个小人也分为:开始、进行中和结束三个状态。角色乱序队列一次只有10个,没完成一个(即代码中的一个level)后,会触发一次初始化人物队列及UI等的刷新。

        6、游戏结束: 通过ScoreManager统一管理游戏中的结果数据。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值