GameFreamWork框架----事件系统的应用
事件系统用途广泛,对处理玩家数据有很大帮助(玩家金币,经验,等级),让数据多次调用,降低耦合

在unity中应用(以玩家金币发生变化来演示);
1).注册监听
2).移出监听
3).金币发生变化的时候,通知每个界面
操作:
1.将Event三个脚本导入工程中;

2.写一个脚本,PlayerInforManagerTest,脚本主要作用是存储用户数据,其他脚本需要数据时就在这个脚本中调用,利用事件系统


using System.Collections;
using System.Collections.Generic;
using UnityEngine; public class PlayerInfoManagerTest { #region 单例模式
private static PlayerInfoManagerTest instance; public static PlayerInfoManagerTest Instance
{
get
{
if (instance == null)
{
instance = new PlayerInfoManagerTest();
}
return instance;
}
} private PlayerInfoManagerTest() { }
#endregion private int playerGold; public int PlayerGold { get { return playerGold; } set {
//之前玩家金币数值 != 设置过来的数值
if (playerGold != value)
{
playerGold = value;
//数值发生变化 通知注册当前 金币发生变化的 界面
EventDispatcher.TriggerEvent<int>(EventKey.OnPlayerGoldChange, playerGold); } }
} }
3).在事件系统的EventKey脚本中添加需要改变数据的Key

4).写一个脚本EventTest,作用是作为改变数据而调用事件系统,相当于一个商店购买(出售)装备时,金币减少(增加),通知玩家PlayerInforManagerTest数据中心更新数据,从而让其他(如玩家背包显示金币)脚本调用PlayerInforManagerTest时数据一致.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI; public class EventTest : MonoBehaviour { public Text goldText; // Use this for initialization
void Start()
{
EventDispatcher.AddEventListener<int>(EventKey.OnPlayerGoldChange, OnPlayerGoldValueChange);
} void OnPlayerGoldValueChange(int gold)
{
goldText.text = gold.ToString();
} // Update is called once per frame
void Update() { }
private void OnDestroy()
{
EventDispatcher.RemoveEventListener<int>(EventKey.OnPlayerGoldChange, OnPlayerGoldValueChange); } public void OnClickToAddGold()
{
PlayerInfoManagerTest.Instance.PlayerGold += ;
}
}
5).在unity中添加button和金币Text文本,挂载脚本实现.

GameFreamWork框架----事件系统的应用的更多相关文章
- 小程序框架之视图层 View~事件系统~WXS响应事件
WXS响应事件 基础库 2.4.4 开始支持,低版本需做兼容处理. 背景 有频繁用户交互的效果在小程序上表现是比较卡顿的,例如页面有 2 个元素 A 和 B,用户在 A 上做 touchmove 手势 ...
- C# 开源框架
一.AOP框架 Encase 是C#编写开发的为.NET平台提供的AOP框架.Encase 独特的提供了把方面(aspects)部署到运行时代码,而其它AOP框架依赖配置文件的方式.这种 ...
- 迷你MVVM框架 avalonjs 入门教程
新官网 请不要无视这里,这里都是链接,可以点的 OniUI组件库 学习教程 视频教程: 地址1 地址2 关于AvalonJs 开始的例子 扫描 视图模型 数据模型 绑定 作用域绑定(ms-contro ...
- 偶的《javascript框架设计》终于出版
#cnblogs_post_body p{ text-indent:2em!important; } 历时两年多,我的书终于付梓出版了.应各方面的要求,写软文一篇,隆重介绍一下此书对各位程序员的钱途有 ...
- .NET平台下开源框架
一.AOP框架Encase 是C#编写开发的为.NET平台提供的AOP框架.Encase 独特的提供了把方面(aspects)部署到运行时代码,而其它AOP框架依赖配置文件的方式.这种部署方面(asp ...
- JS读书心得:《JavaScript框架设计》——第12章 异步处理
一.何为异步 执行任务的过程可以被分为发起和执行两个部分. 同步执行模式:任务发起后必须等待直到任务执行完成并返回结果后,才会执行下一个任务. 异步执行模式:任务发起后不等待任务执行完成,而是马上 ...
- 第一章 : javaScript框架分类及主要功能
从内部架构和理念划分,目前JavaScript框架可以划分为5类. 第一种是以命名空间为导向的类库或框架,如果创建一个数组用new Array(),生成一个对象用new Object(),完全的j ...
- 深入解析.NET框架
一.AOP框架 Encase 是C#编写开发的为.NET平台提供的AOP框架.Encase 独特的提供了把方面(aspects)部署到运行时代码,而其它AOP框架依赖配置文件的方式.这种 ...
- Qt 状态机框架学习(没学会)
Qt状态机框架是基于状态图XML(SCXML) 实现的.从Qt4.6开始,它已经是QtCore模块的一部分.尽管它本身是蛮复杂的一套东西,但经过和Qt的事件系统(event system).信号槽(s ...
随机推荐
- Django --- 单表的增删改查
- 利用 Google Chart API 生成二维码大小不一致
大小不一致是由于 chl 参数内容不一样导致的,而 chs 参数只能指定生成图片的大小,不能指定生成具体二维码大小. 比如:https://chart.googleapis.com/chart?ch ...
- shell 变量、参数、数组章节笔记
// 变量名和等号之间不能有空格 hello="123456"; echo $hello; // 花括号只是帮助识别变量边界 echo ${hello}; // unset 删除变 ...
- PHP获取服务器IP和客户端IP
<?php echo '前端机IP:'.$_SERVER['REMOTE_ADDR']; echo '<br />'; echo '后端机IP:'.$_SERVER['SERVER_ ...
- 记一次物理机安装centos7.5 出现黑屏的问题
记一次物理机安装centos7.5 出现黑屏的问题 一.问题出现 使用物理机安装centos7.5,选择Install CentOS Linux7之后,并没有出现选择语言的界面,而是只出现了一个鼠标, ...
- openstack虚拟机rescue模式
nova rescue vm_instance es.ops 20190426 linux虚拟机在出现类似kernel panic后,根据panic信息以及故障前的操作,定位问题的发生点,进行修复 n ...
- RabbitMQ 保证消息不丢失
参考:https://www.imooc.com/article/49814 发送消息的时候,加上messageId字段,数据库记录消息日志表 ,插入的时候为发送中 当收到消息的时候,更改为已发送 , ...
- Anconda 3.7安装以及使用详细教程
Anconda 3.7安装以及使用详细教程 2019-04-17 22:42:03 一.下载anconda 3.7 链接地址:官方地址 二.安装 双击下载好的Anaconda3-2019.03- ...
- python_str的应用
name = "fsafalk" #nam是个变量名 fsafalk是变量 也是字符串 name.startswith('fs')#判断是否是fs开头 name.endswit ...
- Mysql学习笔记03
Mysql 的视图 1 view 在查询中,我们经常把查询结果当成临时表来看, view 是什么? View 可以看成一张虚拟的表,是表通过某种运算得到的有一个投影. 2 如何创建视图? 创建视图 ...