码迷,mamicode.com
首页 > 其他好文 > 详细

Nico Game Studio 2.设置页面读写 纹理载入与选择

时间:2016-02-15 23:52:22      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:

进度十分之慢...

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

分享一下代码:

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个程序集.

Nico Game Studio 2.设置页面读写 纹理载入与选择

标签:

原文地址:http://www.cnblogs.com/niconico/p/5191497.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!