unity3d 研究理解背包和商店的类的关系

前言

背包系统可以有简单,可以有复杂的,这里通过MVC设计方式来写关于背包、商品购买的框架

NGUI制作背包窗口,商店窗口,按钮窗口

1、首先是通过NGUI制作基本的UI界面,然后做成预支体,通过代码来生成这些界面
2、接着按照MVC框架来写脚本代码,

M: 写一个(些)类来专门存放数据 如Item类
C:写一个(些)类来专门控制数据(一般是通过XML、Json读取得到,用字典,list容器储存)如ItemCtrl
V : 写一个、多个UI(父类)控制类来控制各个UI(子)类显示(层级控制)

背包、商店类关系理解图

MVC图

A—->B 箭头代表A使用B的公有方法,来给B的属性字段赋值,B的值属性从父类A中获得,而A父类的数据实际上是从DataCtrl中获取得到的。
即B要有一个公有方法,来为自己赋值,B的公有方法被A(父类)调用,A从DataCtrl中获取的id就传入给B了,给B的字段属性赋值
这里的图有些误导,实际是View对象脚本只要从DataCtrl中获取储存数据信息即可,而Ctrl只需提供一个单例对象和一个(多个)公有方法给View的几个父类脚本调用查找。
即 View—–>Ctrl
Ctll—-X–>View
即视图类(V)只需从DataCtrl(C)中的公有查找方法来找到具体的某个Item(M),而这些Item在DataCtrl的容器储存着。

细节上

  1. 需要注意的是DataCtrl控制的是Item的数据,存储、添加、删减。是运用的引用类型原理,即只要在字典、list容器中找到物品的id,并通过创建一个临时对象变量来对数据操作,此时因为引用类型规则,改变了这个临时对象的变量,字典、容器里储存的这个对象的数据也会相应的改变。这样就达到了数据更新的效果了。
  2. DataCtrl控制类 需要储存数据,而这些储存数据最初是通过读取文件来获取得到的,然后全部以Item类(Mode)的形式储存在一个字典、list容器中了。
  3. DataCtrl经常给View视图真实的数据,好让UI层也进行随时的更新,因此控制类需要写一个单例方法,和若干查找判断方法,来通过id或Name等形式,从储存Item的容器中找到对应的Item(返回Item类)。
  4. View层对象父类从DataCtrl容器中获取全部Item信息(id),接着给全部子类传递信息(id),而View层的子类需要有了id信息才好从DataCtrl中找到对应的Item信息 。
  5. View层只是通过id来从DataCtrl中找到Item信息,来改变UI显示。不要改变Item对象的值,因为数值的改变都应在DataCtrl类中进行操作。
  6. 最后的view子类一般都是和用户点击相关联,如商品的购买按钮,我们一般用UIEventListener.Get来监听,以此来确定是哪个按钮的(每个按钮都有一个id),我们可以获取这个id,然后DataCtrl类在写一个获取这个id的公有方法来具体实现数据控制,
    void buyBtnClick(GameObject go){
        Debug.Log ("购买物品"+ this.ID);
        YoungInfos.instance.toBuyBtnClick (this.ID);
    }

emmm
先写到这,以后随时更新

猜你喜欢

转载自blog.csdn.net/liaoshengg/article/details/81051403