LayaIDE + FGUI + Laya-SimpleFramework-Fairygui框架

本文档介绍了使用LayaIDE 2.9.0_beta和FairyGUI 2020.1.1版本,结合Laya-SimpleFramework-Fairygui框架实现推箱子项目的详细过程。作者通过该项目复习推箱子逻辑,学习并理解优秀架构设计。文中包含项目介绍、架构设计、思维导图、核心代码和实现效果展示。
摘要由CSDN通过智能技术生成

目录

一、项目介绍

近日,在闲余时间把编写果无数次的推箱子项目用laya-simpleFramework-FairyGUI框架再实现了一遍。一来想重温这个编写过不下五次的推箱子项目逻辑,温故而知新嘛;二来熟悉aya-simpleFramework-FairyGUI框架,学习一下别人优秀的架构思路,然后转化为自己的思维。[相关链接]LayaIDE实现推箱子 |C++实现推箱子

二、架构设计

1,LayaIDE采用的是2.9.0_beta版本 LayaIDE下载地址
2,FairyGUI采用的是2020.1.1版本 FGUI官网地址
3,Laya-SimpleFramework-FairyGUI项目 Git地址

三、思维导图

lLaya-SimpleFramework-FairyGUI思维导图

四、核心逻辑代码

/**
 * @desc 游戏核心逻辑
 */
export default class GameLogic {
   
    private static _instance: GameLogic;
    public static get Instance(): GameLogic {
   
        if (this._instance == null) {
   
            this._instance = new GameLogic();
        }
        return this._instance;
    }
    //是否移动
    private _moveFlag: boolean = false;
    public set MoveFlag(value) {
   
        this._moveFlag = value;
    }

    public get MoveFlag() {
   
        return this._moveFlag;
    }

    //节点存储数组
    public nodes: Array<any> = [];
    //上一步地图
    public oldMap = new Array<Array<any>>();
    //人物位置
    private posX = 0;
    private posY = 0;

    /**
     * @desc 绘制地图
     * @param rootNode  根节点
     * @param map       关卡地图数据
     * @param width     地图宽度
     * @param height    地图高度
     */
    public draw(rootNode: fgui.GComponent, map: any[][], width: number, height: number) {
   
        if (!map || map.length <= 0) return;
        //删除所有节点,初始化
        rootNode.removeChildren();

        for (var i = 0; i < width; i++) {
   
            for (var j = 0; j < height; j++) {
   
                switch (map[i][j]) {
   
                    //生成空地
                    case 0:
                        // var space = fgui.UIPackage.createObject("MainPack", "0").asImage;
                        // space.setXY(j * 50, i * 50);
                        // space.setSize(50, 50);
                        // rootNode.addChild(space);
                        // //生成的节点放入数组处理
                        // this.nodes.push(space);
                        break;
                    //生成墙壁
                    case 1:
                        var wall = fgui.UIPackage.createObject("MainPack", "1").asImage;
                        wall.setXY(j * GameDef.block_width, i * GameDef.block_width);
                        wall.setSize(GameDef.block_width, GameDef.block_width);
                        rootNode.addChild(wall);
                        //生成的节点放入数组处理
                        this.nodes.push(wall);
                        break;
                    //生成人物
                    case 2:
                        var man = fgui.UIPackage.createObject("MainPack", "2_" + GameDef.CurActor).asImage;
                        man.setXY(j * GameDef.block_width, i * GameDef.block_width);
                        man.
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值