Godot - 在UI中应用MVC模式

旧街凉风 提交于 2019-12-25 22:58:15

如果对于MVC模式没有较为熟悉的理解,在游戏开发中对此模式可能会比较模糊。

MVC模式简述

  • M : Model 读写数据
  • V : View 用户界面,把数据呈现给用户;接收用户交互,通过回调等方法传递给Controller
  • C : Controller 视图控制器,接受View传递的用户输入,调用Model提供的接口进行处理,在合适的时间把Model传过来的数据显示出来

在游戏开发中的对应关系

在Unity的UGUI系统中这种结构其实比较清晰,Godot的UI系统和UGUI基本一致。

  • M : 数据的存储和相关处理方法,可以通过一个公共的类,如Global,或根据游戏功能分成多个模块
  • V : 依赖游戏引擎的实现和渲染,个人认为View应该是UGUI中承载一个UI界面节点的GameObject,Godot中的Node
  • C : 绑定View中的控件,提供相关控制逻辑

Godot中的实例演示

Model

通过一个静态类Global简化相关逻辑,用来演示

public static void Global
{
    public static int Number { get; set; }

    public static void DoSomething()
    {
        Number = 999;
    }
}

View

Godot中的一个Scene,结构为

    Node (Node)
        TestBtn (Button)

Controller

实现自己的UIManager, 或使用挂接在Node上的脚本, 这里演示挂接在Node上的脚本

using Godot;

public class TestController : Node
{
    private Button m_TestBtn;

    public override void _Ready()
    {
        m_TestBtn = GetNode<Button>("TestBtn");
        m_TestBtn.Connect("pressed", this, "TestBtn_pressed");
    }

    public void TestBtn_pressed()
    {
        GD.Print("Hello, world!");
        Global.DoSomething();
        GD.Print(Global.Number);
    }
}

在Controller中对View的组件进行绑定相应, 并在适当的时候手动刷新View显示

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!