zoukankan      html  css  js  c++  java
  • Nico Game Studio 2.设置页面读写 纹理载入与选择

    进度十分之慢...

    配置读写一样采用之前写的自动绑定的方法:

    分享一下代码:

    SetControl是把数据写到control上的.

    SetObject是把数据写到对象上

    GetData是从控件读取数据,并获得包含这些数据的实例;

    public static void SetControl(this Control control, object data)
            {
                var type = data.GetType();
                Dictionary<string, object> values = new Dictionary<string, object>();
                var fields = type.GetFields();
                foreach (var f in fields)
                {
                    if (values.ContainsKey(f.Name)==false)
                    {
                        values.Add(f.Name, f.GetValue(data));
                    }
                }
                SetData(control, values);
            }
    
            public static T GetData<T>(this Control control) where T : new()
            {
                Dictionary<string, object> values=new Dictionary<string,object>();
                CollectData(control,ref values);
                if (values.Count > 0)
                {
                   var newT= new T();
                   var type = typeof(T);
                  var fields= type.GetFields();
                  foreach (var f in fields)
                  {
                      if (values.ContainsKey(f.Name))
                      {
                          f.SetValue(newT, Convert.ChangeType(values[f.Name],f.FieldType));
                      }
                  }
                  return newT;
                }
                return default(T);
            }
    
            public static void SetObject<T>(this Control control ,object obj) 
            {
                Dictionary<string, object> values = new Dictionary<string, object>();
                CollectData(control, ref values);
                if (values.Count > 0)
                {
                    var type = typeof(T);
                    var fields = type.GetFields();
                    foreach (var f in fields)
                    {
                        if (values.ContainsKey(f.Name))
                        {
                            f.SetValue(obj, Convert.ChangeType(values[f.Name], f.FieldType));
                        }
                    }
                }
            }

    调用方式就是:

     control.SetObject<SettingModel>(this);
      Util.SerializeUtil.Serialize2File(SaveFilePath, this);

    因为是扩展方法,直接通过控件调用,然后序列化到文件中保存.

    2.还做了纹理载入.这部分很简单.麻烦在于在一个控件展示数量可能很大的纹理阵列,还要可以选择,多选.

    一开始采用自绘,双滚动条+Paint事件,SetStyle 双缓冲等 解决闪烁问题.后来想说用控件会不会更简单.

    于是尝试了,Panel.isAutoScroll=true.往里加panel,设置其Image的方式.

    这么做好处是绘图和事件触发很简单,但效率低,载入大图的时候就会卡很久.滚动条也较卡.

    还是得自绘,自己做事件判断,效率比较高.

    ikvmc.exe可以同时拖入多个jar包进行转换.会自动打包生成1个程序集.

  • 相关阅读:
    技术面试问题汇总第005篇:猎豹移动反病毒工程师part5
    技术面试问题汇总第004篇:猎豹移动反病毒工程师part4
    Hexo安装和配置
    hexo从零开始到搭建完整 转
    window下phpstudy的nginx配置虚拟主机
    CentOS Linux搭建SVN服务器
    解决CentOS7关闭/开启防火墙出现Unit iptables.service failed to load: No such file or directory.
    numpy使用
    Linux学习15_CentOS6.5下netcat工具安装教程
    中国天气网七天天气
  • 原文地址:https://www.cnblogs.com/niconico/p/5191497.html
Copyright © 2011-2022 走看看