LoxodonFramework快速入门

一、简介

LoxodonFramework是什么,是用来干嘛的。我在这里就不介绍了,直接上链接:vovgou/loxodon-framework: An MVVM & Databinding framework that can use C# and Lua to develop games (github.com)

链接里有很全的介绍和教程,这篇文章主要记录学习理解该框架的心得。

二、快速入门

笔者之前也用过WPF的MVVM框架–Prism,所以在unity中也想找到类似的框架,那么LoxodonFramework是否也可以像Prism那么好使用呢?现在我们可以简单尝试一下。

三、示例

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZRXRgMVy-1638002288693)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20211127145949566.png)]

我们创建好上述的项目,想做这么一件事:输入框输入值后滑动条会滑动到相应的值上,滑动条滑动的时候输入框会显示相应的值。

试想,如果不适用MVVM的思想,我们可以挂载一个脚本,脚本属性中分别找到这两个控件,然后操作的时候分别给对方赋值,这应该是一个很简单的工作。但是使用MVVM思路该怎么做呢?

3.1Model

由于示例的数据模型很简单,可以使用基本数据类型,所以这一层省掉了。

3.2ViewModel

这一层就是我们的交互逻辑。数据的更新和事件响应逻辑代码都在这里。

3.3View

这里是UI层,只涉及到控件,不涉及到数据业务等。说一下思路,一般是在UI控件上挂载一个脚本,这个脚本也就是我们需要的View层,当然也会继承UIView类,然后在这里脚本中进行绑定操作。绑定主要是将UI控件的属性或者事件绑定到ViewModel中的属性或者方法中。所以ViewModel不是脚本,不需要挂载在控件上。

在这里插入图片描述

然后看一下代码具体实现:

public class SampleViewModel : ViewModelBase
{
    private float sliderValue;
    public float SliderValue
    {
        get { return sliderValue; }
        set { Set<float>(ref sliderValue, value, "SliderValue"); }
    }

    public void OnSliderValueChanged(float newValue)
    {
        if (newValue != sliderValue)
        {
            this.SliderValue = newValue;
            Debug.Log($"NewValue:{newValue}");
        }
    }

    public void OnInputFieldChanged(string str)
    {
        this.SliderValue = int.Parse(str);

    }
}
public class SampleView : UIView
{
    public InputField input;
    public Slider slider;

    protected override void Awake()
    {
        //获得应用上下文
        ApplicationContext context = Context.GetApplicationContext();
        //启动数据绑定服务
        BindingServiceBundle bindingService = new BindingServiceBundle(context.GetContainer());
        bindingService.Start();
    }

    protected override void Start()
    {
        //获得数据绑定上下文
        IBindingContext bindingContext = this.BindingContext();
        bindingContext.DataContext = new SampleViewModel { SliderValue = 98 };

        //绑定UI控件到视图模型
        BindingSet<SampleView, SampleViewModel> bindingSet;
        bindingSet = this.CreateBindingSet<SampleView, SampleViewModel>();

        //将VM中的值绑定到UI控件上,注意这里是单向绑定vm=>v
        bindingSet.Bind(this.input).For(v => v.text).To(vm => vm.SliderValue).OneWay();
        bindingSet.Bind(this.slider).For(v => v.value).To(vm => vm.SliderValue).OneWay();
        
        //然后将控件的事件绑定到vm的方法中,注意To要使用泛型,方法的参数与事件方法参数一致。
        //当然也可以绑定到命令上(后文再介绍)
        bindingSet.Bind(this.slider).For(v => v.onValueChanged).To<float>(vm => vm.OnSliderValueChanged);
        bindingSet.Bind(this.input).For(v => v.onEndEdit).To<string>(vm=>vm.OnInputFieldChanged);

        //这一句也不能忘了
        bindingSet.Build();
    }
}

绑定的思路大同小异。

四、关于绑定

上面示例中有这么一段代码:

        //获得数据绑定上下文
        IBindingContext bindingContext = this.BindingContext();
        bindingContext.DataContext = new SampleViewModel { SliderValue = 98 };

上面的代码也可以修改如下:

this.SetDataContext(new SampleViewModel { SliderValue = 98 });

Behaviour类中拓展了SetDataContext方法,其内部实现也是使用了IBindingContext接口。
写过WPF绑定的同学肯定似曾相识,没错,这里也出现了DataContext的概念。关于DataContext,框架的作者在文档中有这样的描述:

一般来说数据绑定都在视图创建函数中来初始化,通过BindingSet来配置视图控件和视图模型之间的绑定关系,当调用BindingSet的Build函数时,
Binder会创建BindingSet中所有的绑定关系对,被创建的绑定对会保存在当前视图的BindingContext中。BindingContext在首次调用时自动创建,同
时自动生成了一个BindingContextLifecycle脚本,挂在当前视图对象上,由它来控制BindingContext的生命周期,当视图销毁时,BindingContext会
随之销毁,存放在BindingContext中的绑定关系对也会随之销毁。

所以,对于View层的DataContext,我们是可以在外部设置好的,或者后期改变的,不一定和示例中的一样就在build的时候设置好。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: loxodon framework bundle 1.9.10 是一个开发框架的软件包。它是基于Java语言开发的,旨在简化Android平台上的应用程序开发过程。通过提供一系列的工具和库,loxodon framework bundle 1.9.10 可以帮助开发者更高效地构建稳定、可扩展和易于维护的Android应用程序。 该框架提供了丰富的功能和特性,包括依赖注入、事件总线、UI自动化测试、网络请求、数据持久化、资源管理等。通过依赖注入功能,开发者可以轻松地将依赖的对象注入到目标对象中,从而增加代码的可读性和可维护性。事件总线功能可以帮助组件之间实现跨界面的通信和信息传递。UI自动化测试工具可以简化测试流程,提高应用的质量和稳定性。 此外,loxodon framework bundle 1.9.10 还具有模块化的架构,可以让开发者根据项目需求选择需要的功能模块,从而减少代码冗余和提高应用程序的性能。框架还提供了丰富的文档和示例代码,帮助开发者快速上手和解决问题。 总之,loxodon framework bundle 1.9.10 是一个强大的Android开发框架,它可以帮助开发者更轻松地构建高质量、高效率的应用程序。 ### 回答2: loxodon framework bundle 1.9.10 是一个针对游戏开发的框架捆绑包。它是一个开源的工具集,可以帮助游戏开发者更高效地构建和管理他们的游戏项目。 该框架捆绑包提供了一系列功能和工具,例如资源管理、物体控制、界面设计、声音管理和网络通信等。它可以帮助开发者更方便地管理游戏资源,从而提高开发效率并减少开发时间。 loxodon framework bundle 1.9.10 还提供了一些可扩展的功能模块,如广告插件、社交媒体集成和统计分析等。这些模块可以帮助开发者将游戏与广告平台和社交媒体进行集成,以增加游戏的曝光度和用户互动性,并可以追踪和分析用户行为数据以改进游戏体验。 此外,loxodon framework bundle 1.9.10 还具有跨平台的特性,支持多个主流平台,如iOS、Android和Windows等。开发者可以使用同一套代码来构建适用于不同平台的游戏,并且可以进行相应的定制化和优化。 总结而言,loxodon framework bundle 1.9.10 是一个功能强大的游戏开发框架捆绑包,它为开发者提供了丰富的工具和功能模块,帮助他们更高效地构建和管理游戏项目,并且支持跨平台开发。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值