Laya Air游戏开发模式之传统MVC模式(基础篇)

没错这次要介绍的开发模式就是开发界中的万油精🙈MVC模式

一、什么是MVC模式

MVC简单来说就是三个词:Model(模型)、View(视图)和Controller(控制器):

Model:是游戏中的"数据层",也就是程序需要操作的数据或信息。

View:是直接面向最终用户的"视图层"。它是提供给用户的操作界面,是程序的外壳。

Controller:就是游戏中最核心的"控制层",数据与视图之间的通信都通过Controller来控制

每一层几乎都是相互独立的,对外提供调用的接口,一般的我们当玩家从"视图层"做出响应,就会传递到"控制层",控制层再改变数据层,“数据层”反馈给"控制层",再发送到视图层(其实在开发中也常会用到数据驱动的方式:当"数据层"发生改变的时候,直接通过事件派送的方式反馈到视图层)

二、实例解释MVC模式

只是简单的介绍理论可能有些萌新会觉得懵逼,这里使用TypeScript语言在Laya Air游戏引擎通过"玩家升级"的小例子来简单说明:

1.首先在节点下创建"up"、"ProgressBar"节点,分别用于监听获取经验事件和显示当前经验值进度条:

 

2.分别创建View、Contoller、Model文件夹并创建对应的脚本组件:

3.将model脚本挂载到进度条节点上,将Controller脚本挂到场景节点下用于控制游戏的逻辑(在实际开发中会根据不同的场景、UI创建不同的ctrl):

4.给model层的脚本写上基本数值(为了方便这里以表的形式)并导出:

var user_info = {
    cur_grade:1,

    set_cur_grade(grade){
        this.cur_grade = grade;
    },

    get_cur_grade(){
        return this.cur_grade;
    }
}

export {user_info};

5.转到View层的脚本写上改变进度条的方法:

export default class proressbal_model extends Laya.Script{
    constructor(){
        super();
    }

    chang_cur_progress(per:number,gra:number):void{
        var blood_progress:Laya.ProgressBar =  this.owner as Laya.ProgressBar;
        var percentage:Laya.Text = this.owner.getChildByName("per") as Laya.Text; 
        var grade:Laya.Text = this.owner.getChildByName("grade") as Laya.Text; 
        blood_progress.value = per / 100; //属性最大为1
        percentage.text = per + "%";
        grade.text = "Lv." + gra;
    }
}

6.接下来就是最关键的Controller层的game_ctrl脚本,首先导入View层和Model层的脚本,分别获取进度条节点和"获取经验"按钮节点,按钮添加点击监听事件,当View层发生改变的时候,Controller层捕获到事件,通过计算再传回View层和Model层:

import {user_info} from "../view/user_info_view";
import proressbal from "../model/proressbal_model";
export default class game_ctrl extends Laya.Script{
    public cur_grade_per:number = 0; //当前进度条
    public cur_grade:number = 0;  //当前等级
    constructor(){
        super();
    }

    onAwake(){
        var grade_up_but =  this.owner.getChildByName("up");
        var pro = this.owner.getChildByName("ProgressBar");
        var proressbal_com = pro.getComponent(proressbal);
        this.cur_grade = user_info.get_cur_grade();
        //初始化
        proressbal_com.chang_cur_progress(0,this.cur_grade);
        //开始监听
        grade_up_but.on(Laya.Event.CLICK,this,()=>{
            //假设这里每次点击获取30点经验值、每到达100升级一次
            this.cur_grade_per += 30;
            if(this.cur_grade_per >= 100){
                this.cur_grade_per = 0;
                user_info.set_cur_grade(++this.cur_grade);
            }
            proressbal_com.chang_cur_progress(this.cur_grade_per,this.cur_grade);
        });
    }
}

最后是显示效果:

三、写在最后

ok,MVC的讲解基本上就这点内容,只要记住试图层是负责可视化的界面,控制层是负责游戏的逻辑,模型层负责底层存储的数据,在实际开发中不同场景可能都会对应一个或多个View+Controller+Model脚本,其实这只是非常传统(老)的MVC模式(作者也只是从Unity3d引擎那边借鉴过来翻译成Laya引擎版本来说明的),Laya引擎虽然在h5游戏引擎性能方面非常强大但在编辑器方面的确存在许多bug,后面还会介绍一种另一种经过修改版的mvc模式就是为了避开使用laya的2d编辑器(3d是Unity引擎负责),一种所有可视化界面都通过代码动态加载的模式。

 

谢谢阅览奎斯文章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值