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 ...
随机推荐
- php递归实现一维数组转为指定树状结构 --- 省市区处理
### 这两天脑壳痛,一时短路,想不到准备利用递归实现这个需求,最后还是要请教同事,回来自己在实现了一遍,并记录下来 ### 原数据: // { // 广东省: { // 广州市: [ // &quo ...
- IDEA启动maven项目
一.安装IDEA 自行到官网下载,有条件请购买版权 地址:https://www.jetbrains.com/idea/ 二.修改快捷键(如果不是eclipse老用户请忽略这段) 左上角File→Sr ...
- Runtime个别API的使用
Runtime 关于属性部分API的说明以及使用方法 使用Runtime机制需要引入头文件: #import <objc/runtime.h> 1: Ivar *class_copyIv ...
- Java堆和优先队列
普通队列:先进先出,后进后出 优先队列:出队顺序和入队顺序无关,和优先级相关. 堆中某个节点的值总是不对于其父节点的值,最大堆. public class Array<E> { priva ...
- 关于vue的computed、filters、watch
filters 这个属性大家可能用的不是很多 因为一般的数组过滤我们用 es6的filter就能完成了 我想到一个场景,网上买书促销 满100减50 满两百减100 <input type=&q ...
- RN和IOS原生端交互
1.RCTBridgeModule #import <Foundation/Foundation.h> #import "RCTBridgeModule.h" #imp ...
- Promise 返回值
then 和 catch 中返回 promise,会在这个 promise resolve 或 reject 的时候,把 resolve 或 reject 的结果作为参数传给后面的 then 或 ca ...
- pycharm 记录
一.pycharm字体放大.缩小的设置 File —> setting —> Keymap —>在搜寻框中输入:increase —> Increase Font Size(双 ...
- JSP(二):JSP九大内置对象、四个作用域对象
jsp的九大内置对象: 内置对象: jsp文件在转译成其对应的Servlet文件的时候自动生成的并声明的对象.我们在jsp页面中直接使用即可. 注意: ...
- Desert King POJ - 2728(最优比率生产树/(二分+生成树))
David the Great has just become the king of a desert country. To win the respect of his people, he d ...