快捷键XML管理和事件管理小结(实例)
来源:互联网 发布:淘宝店标logo生成器 编辑:程序博客网 时间:2024/06/05 18:58
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System;
using System.Xml;
public delegate bool ShortCutKeyEvent();
public class ShortcutKeyManager :MonoBehaviour {
private ShortcutKeyManager() { }
private static ShortcutKeyManager instance;
public static ShortcutKeyManager Instance
{
get
{
return instance;
}
}
void Awake()
{
instance = this;
}
void Start()
{
ShortCutKeyEvent eve1=RevocationManager.Instance.BackRevovation;
AddShortCutKeyEvent("撤销", eve1);
ShortCutKeyEvent eve2 = RevocationManager.Instance.RestoreRevocation;
AddShortCutKeyEvent("撤销恢复", eve2);
}
public Dictionary<string, ShortCutKeyEvent> shortCutKeys = new Dictionary<string, ShortCutKeyEvent>();//快捷键名字和快捷键触发事件
public Dictionary<string, string> shortKeyDatas = new Dictionary<string, string>(); //快捷键键位和 快捷键名字
public bool ReadXmlData(XmlDocument xml)
{
if(xml!=null)
{
XmlElement element = xml.DocumentElement;
XmlNodeList datas = element.ChildNodes;
if(datas!=null&&datas.Count>0)
{
for(int i=1;i<datas.Count;i++)
{
XmlElement t_data = (XmlElement)datas[i];
if(t_data!=null)
{
string t_str = t_data.GetAttribute("Data");
string[] t_strs= t_str.Split(',');
if(t_strs.Length>1)
{
shortKeyDatas.Add(t_strs[1], t_strs[0]);
}
}
}
return true;
}
return false;
}
return false;
}
/// <summary>
/// 添加快捷键事件
/// </summary>
/// <param name="shortcutKeyName"></param>
/// <param name="eve"></param>
/// <returns></returns>
public bool AddShortCutKeyEvent(string shortcutKeyName,ShortCutKeyEvent eve)
{
if(!string.IsNullOrEmpty(shortcutKeyName) &&eve!=null)
{
shortCutKeys.Add(shortcutKeyName,eve);
}
return false;
}
void OnGUI()
{
if(Input.anyKey)
{
if(shortKeyDatas!=null&&shortKeyDatas.Count>0)
{
DoKeyEvent();
}
}
}
private bool DoKeyEvent()
{
foreach (var it in shortKeyDatas)
{
string t_key = it.Key;
string[] t_keys = t_key.Split('+');
if (t_keys.Length.Equals(1))
{
if (Input.GetKey((KeyCode)Enum.Parse(typeof(KeyCode), t_keys[0])))
{
FindKeyEventToDo(it.Value);
}
}
if (t_keys.Length > 1)
{
bool flag=true;
foreach(var it2 in t_keys)
{
if (!Input.GetKey((KeyCode)Enum.Parse(typeof(KeyCode),it2)))
{
flag = false;
break;
}
}
if(flag)
{
FindKeyEventToDo(it.Value);
}
flag = true;
}
}
return false;
}
private bool FindKeyEventToDo(string keyName)
{
if(!string.IsNullOrEmpty(keyName))
{
foreach (var it1 in shortCutKeys)
{
if (it1.Key.Equals(keyName))
{
it1.Value();
Debug.Log("执行"+it1.Key);
return true;
}
}
}
return false;
}
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System;
using System.Xml;
public delegate bool ShortCutKeyEvent();
public class ShortcutKeyManager :MonoBehaviour {
private ShortcutKeyManager() { }
private static ShortcutKeyManager instance;
public static ShortcutKeyManager Instance
{
get
{
return instance;
}
}
void Awake()
{
instance = this;
}
void Start()
{
ShortCutKeyEvent eve1=RevocationManager.Instance.BackRevovation;
AddShortCutKeyEvent("撤销", eve1);
ShortCutKeyEvent eve2 = RevocationManager.Instance.RestoreRevocation;
AddShortCutKeyEvent("撤销恢复", eve2);
}
public Dictionary<string, ShortCutKeyEvent> shortCutKeys = new Dictionary<string, ShortCutKeyEvent>();//快捷键名字和快捷键触发事件
public Dictionary<string, string> shortKeyDatas = new Dictionary<string, string>(); //快捷键键位和 快捷键名字
public bool ReadXmlData(XmlDocument xml)
{
if(xml!=null)
{
XmlElement element = xml.DocumentElement;
XmlNodeList datas = element.ChildNodes;
if(datas!=null&&datas.Count>0)
{
for(int i=1;i<datas.Count;i++)
{
XmlElement t_data = (XmlElement)datas[i];
if(t_data!=null)
{
string t_str = t_data.GetAttribute("Data");
string[] t_strs= t_str.Split(',');
if(t_strs.Length>1)
{
shortKeyDatas.Add(t_strs[1], t_strs[0]);
}
}
}
return true;
}
return false;
}
return false;
}
/// <summary>
/// 添加快捷键事件
/// </summary>
/// <param name="shortcutKeyName"></param>
/// <param name="eve"></param>
/// <returns></returns>
public bool AddShortCutKeyEvent(string shortcutKeyName,ShortCutKeyEvent eve)
{
if(!string.IsNullOrEmpty(shortcutKeyName) &&eve!=null)
{
shortCutKeys.Add(shortcutKeyName,eve);
}
return false;
}
void OnGUI()
{
if(Input.anyKey)
{
if(shortKeyDatas!=null&&shortKeyDatas.Count>0)
{
DoKeyEvent();
}
}
}
private bool DoKeyEvent()
{
foreach (var it in shortKeyDatas)
{
string t_key = it.Key;
string[] t_keys = t_key.Split('+');
if (t_keys.Length.Equals(1))
{
if (Input.GetKey((KeyCode)Enum.Parse(typeof(KeyCode), t_keys[0])))
{
FindKeyEventToDo(it.Value);
}
}
if (t_keys.Length > 1)
{
bool flag=true;
foreach(var it2 in t_keys)
{
if (!Input.GetKey((KeyCode)Enum.Parse(typeof(KeyCode),it2)))
{
flag = false;
break;
}
}
if(flag)
{
FindKeyEventToDo(it.Value);
}
flag = true;
}
}
return false;
}
private bool FindKeyEventToDo(string keyName)
{
if(!string.IsNullOrEmpty(keyName))
{
foreach (var it1 in shortCutKeys)
{
if (it1.Key.Equals(keyName))
{
it1.Value();
Debug.Log("执行"+it1.Key);
return true;
}
}
}
return false;
}
}
注意点:
1.Event.current智能在OnGUI里用,别处报空。
2.为了防止所有实例化,初始化数据等操作产生冲突,在Start里赋值。
0 0
- 快捷键XML管理和事件管理小结(实例)
- XML管理实例
- [学习小结]Activiti5 流程实例管理
- UC/OS II事件管理之信号量管理实例
- xml的实例--学生管理系统
- 事件管理
- mui 开发知识 积累总结-----------事件管理(自定义事件用法实例)
- 44、实例 使用jQuery管理事件之事件绑定
- 45、实例 使用jQuery管理事件之注销事件
- 46、实例 使用jQuery管理事件之事件触发
- 47、实例 使用jQuery管理事件之事件切换
- 48、实例 使用jQuery管理事件之事件委派
- 49、实例 使用jQuery管理事件之事件命名空间
- 51、实例 使用jQuery管理事件之自定义事件
- oracle 区管理和段空间管理小结
- 实例管理
- 实例管理
- SVN和Git代码管理小结
- ios developer tiny share-20161017
- 9 javascript JSON
- 欢迎使用CSDN-markdown编辑器
- 动态数组申请————简单版
- XML是什么,它可以做什么?——XML详解
- 快捷键XML管理和事件管理小结(实例)
- Android学习之——SpannableString和TextView的使用及研究
- Curiously Recurring Template Pattern
- calico在kubernetes中的策略
- Sugar ORM——让你不用学SQLite数据库
- LeetCode 108. Convert Sorted Array to Binary Search Tree
- java学习笔记-窗口绘图(坦克大战)
- java IOUtils copy and flush client
- 自我实践