ET框架解读其一

news2025/1/13 17:44:03

ECS?

  • 真正的ECS属于是entity-component-system
  • 组件里面只有数据没有方法,system里面是针对组件的方法,system通过查找只需要关注自己想关注的组件集合就可以。
  • 但是ET框架的代码在组件里面写满了方法,有数据又有方法的组件,随时可拆卸,像什么?没错
  • 是Unity的组件模式
  • 看这个资源组件
    在这里插入图片描述
  • 而这种组件本质上相当于我们经常用的单例Manager,只不过他是属于系统层面的服务,所以全部挂载到Game这个实体上面了
  • 所以ET框架本身是一个杂糅的东西,他把Unity的组件模式和ECS式的东西混在了一起。
  • 真正的ECS框架可以看这个ECS框架
  • 他是为了用ECS而去用ECS,但本质上还是OOP那一套。
    在这里插入图片描述
  • 另外,在我看来ECS其实是对MVC里面的Model业务模型进行了拆分,但是对于VC来说,该怎么写还是怎么写。
  • 当然有失偏颇,我可能看一些ECS的demo源码会有更深入理解

消息处理

  • 在消息处理这方面
  • 它的逻辑是这样的,在点击进入地图的按钮之后他会发送一个消息到服务器,服务器会发送一个玩家ID回来
  • 这个玩家ID就是客户端的唯一标识
  • 在收到服务器的回复消息时,再发送一个创建Unit的内部消息
  • 这个内部消息的处理者会创建这个Unit并进行广播,为什么要广播,不是很懂?为什么不用事件而要用内部消息也很奇怪?
  • 在创建Unit的时候在他身上挂载了寻路组件和移动组件。
  • 而游戏场景里面有一个OperaCompoent,这个组件会实时监听按键的点击并且将点击的位置发送给服务器,服务器再传送回客户端
  • 【这边也挺奇怪的,】
  • 客户端这边接收ClickMapActor消息后解析位置,调用unit的Path组件进行移动。大体流程就是这样。
  • 向服务器发送进入地图
    在这里插入图片描述
  • 接收服务器的返回消息后发送内部的创建单位消息
    在这里插入图片描述
  • 内部收到后开始创建单位并添加一系列组件
    在这里插入图片描述
  • opera组件监听鼠标点击事件并向服务器发送click位置消息
    在这里插入图片描述
  • ==在接收消息的处理函数里面进行处理
    在这里插入图片描述
  • 但其实这样很不连贯,我发送一个消息,应该await等待获得消息,然后再做处理,这样就弄的很分散不够集中

事件处理

  • ET的所有逻辑全部用事件来处理了
  • 这带来一个坏处,就是没办法高内聚。
  • 本来属于一个业务模型里面的逻辑,通过事件分散到了两到三个脚本里面。增加了阅读难度和上下连贯性。
  • 单纯举例来说,游戏初始化后发送了InitScenFinish事件。
  • UI处理模块接收到事件创建UI物体并显示
  • 在各个UI单独的组件比如LoginCom和LobbyCom里面进行UI逻辑撰写即并绑定事件
  • 他把本属于Model层的代码全部写进了静态类Helper里面来调用。
  • 也就是说View层直接调用了Model层代码。其实这样就强耦合了。
  • 直接调用MapHelper在这里插入图片描述
  • 直接调用LoginHelper
    在这里插入图片描述- 它的UI处理也很蹩脚,登录界面属于是LoginState里面,常规来说只需要这样,而我们只需要切换到EnterMapState的时候调用对应接口就行了。这样还上下文明显且连贯
class LoginState:State{
	
	void OnEnter(){
		UI.Show()
	}
	void OnLeave(){
		UI.Hide()
	}

}
  • 但是在它的代码中,在发送登录完成消息后是这样的
    在这里插入图片描述
  • 因为他要关闭Login的UI,然后显示Lobby的UI
  • 但其实Login的加载和卸载明明放在一个脚本会更好
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/74655.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spire.Doc for Java 10.12.2 update Word to PDF/HTML to Word

谷歌找破解版Spire.Doc for Java is a professional Word API that empowers Java applications to create, convert, manipulate and print Word documents without dependency on Microsoft Word. By using this multifunctional library, developers are able to process co…

并发编程概述 和 并行编程(Parallel Framework)

任务(task) 异步编程(async&await) 并发编程概述 前言 说实话,在我软件开发的头两年几乎不考虑并发编程,请求与响应把业务逻辑尽快完成一个星期的任务能两天完成绝不拖三天(剩下时间各种…

HPPH-SiO2 NPs/PEG/DSPE光克洛修饰介孔二氧化硅纳米粒子/聚乙二醇/磷脂的研究

小编这里分享的科研知识是HPPH-SiO2 NPs/PEG/DSPE光克洛修饰介孔二氧化硅纳米粒子/聚乙二醇/磷脂的研究,来看! 光克洛修饰介孔二氧化硅纳米粒子的研究: 光敏剂的研发历经以卟吩姆钠为代表的第一代卟啉类光敏剂到以维替泊芬,他拉泊芬和替莫泊芬…

揭秘!女程序员为啥更赚钱?这4个大招,用Python做副业躺赚

关于穷,去年有了一个更学术的说法:隐形贫困人口。 就是因为有太多“种草达人”,让我们为了物质生活超前消费,再加上不理财的话,那简直是雪上加霜。 看到知乎上面最近有一个很火的问题: “90后的你&#…

为了学会更多炫酷的 canvas 效果,我熬夜复习了三角函数相关的知识点

稳定性建设之JavaScript代码不能被阻断 背景 js代码可能会因为某些原因,导致出错,进而整个后续代码有可能都被阻断。直接影响线上的稳定性 最常见的js被阻断的情况 console.log(111) // 预期 a {} // 结果 a undefined a.a 1 console.log(222) // …

web前端期末大作业 HTML游戏资讯网页设计制作 简单静态HTML网页作品 DW游戏资讯网页作业成品 游戏网站模板

🎉精彩专栏推荐👇🏻👇🏻👇🏻 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业…

CTO职位刚发布,一天收到100+份简历

IT行业卷可是没有想到这么卷,我们公司最近招聘CTO,一天收到100份简历,这里面有太多优秀的人,简直挑花了眼。这里面有英国毕业的,有北京大学的,还有各种985和211毕业的大学生,简历也是非常的丰富…

总结717

大三上半学期过去了。回想起当初那个暑假还在纠结的问题。如今,我也算是想通了。 回想起这样一个夜晚,我与好几位同学在谈论考研的事情。其中有一位同学问:“所以,你们为什么要考研呢?”有的同学说是“想到名校走走”…

【C++常用容器】STL基础语法学习stack容器

目录 ●stack基本概念 ●stack常用接口 ●构造函数 ●赋值操作 ●数据存取 ●大小操作 ●stack基本概念 简要介绍: stack是一种先进后出或后进先出的数据结构,它只有一个出口。栈中只有顶端元素才可以被外界使用,因此栈不允许有遍历行为。栈…

对vue的mixin的理解,有什么应用场景?

mixin是什么 Mixin是面向对象程序设计语言中的类,提供了方法的实现。 其他类可以访问mixin类的方法而不必成为其子类 当一段代码非常相似的时候就可以抽离成一个mixin mixins是一个js对象,它可以包含我们组件中script项中的任意功能选项,…

不是所有国产软件都像360一样流氓!这些良心国产软件不该被埋没

提到国产软件,很多人第一反应——360安全卫士。 但就像那句著名点评:“电脑上的常见问题有一半是安装360可以解决的,另一半是卸载360可以解决的。” 360可以说让人又爱又恨,强大的杀毒能力毋庸置疑,但是捆绑安装也是…

java计算机毕业设计基于安卓Android的学生个人支出管理APP

项目介绍 基于APP的学生个人支出管理系统主要针对广大学生,本设计分为用户客户端和管理员后台管理,前台用户管理使用Android Studio制作,使用了JS、HTML和uniapp开发框架,后台管理使用JAVA:MySQL数据库来保存数据以及上传数据。MySQL体积小、速度快,为数据的存储和…

用Python机器人监听微信群聊, 我看谁这么大的胆子敢调侃老板和前台小姐姐!

随着微信社交的兴起,我们加入的群也越来越多,一个不经意就被拉入好几个群,群是大家协同交流的平台,但是微信群却越来越泛滥,不知道大家有没有统计过自己浪费在毫无营养的群中的时间? 因为群质量太低或者群太…

Web页面测试

一、Web的功能测试 1、超链接测试 a、链接与链接的说明文字要匹配 (注:也可以是图片) b、链接的文字要描述正确 c、链接的文字要精简有效 d、链接的页面应该存在,不应该出现404找不到页面的错误 e、没有孤立页面,只有…

Android kotlin 基础知识codelab Fragment Summary

创建 fragment 在此 Codelab 中&#xff0c;您向 AndroidTrivia 应用添加了一个 fragment&#xff0c;在本课的后续两个 Codelab 中您将继续在此应用中执行操作。 fragment 是 activity 的模块化部分。fragment 有自己的生命周期&#xff0c;会接收自己的输入事件。使用 <…

宝宝经常吐奶,除了拍嗝,这6个细节也不容忽视,别因小失大

众所周知&#xff0c;宝宝吐奶是很常见的。不过&#xff0c;虽然很常见&#xff0c;但只要宝宝吐奶&#xff0c;尤其是宝宝吐奶时&#xff0c;家长们都会非常心疼&#xff0c;迫不及待地想代替宝宝承受这些不适。为什么宝宝这么容易吐奶&#xff1f;首先&#xff0c;宝宝的胃是…

JQuery 基础

JQuery对象和JS对象区别与转换 1. JQuery对象在操作时&#xff0c;更加方便。 2. JQuery对象和js对象方法不通用的. 3. 两者相互转换 * jq -- > js : jq对象[索引] 或者 jq对象.get(索引) * js -- > jq : $(js对象) <script>//1.通过…

定时执行专家 —— 模拟键盘按键、鼠标单击功能发布(可发送快捷键、热键、鼠标左键多次单击)

目录 ◆ 定时执行专家 —— 模拟键盘按键 ◆ 定时执行专家 —— 模拟鼠标单击 ◆ 定时执行专家 —— 模拟键盘按键 - 设置方法 &#xff08;1&#xff09;点击 “定时执行专家” 工具栏 “新建” 图标&#xff0c;打开 “任务对话框”&#xff08;图1&#xff09;&#xff1…

Spring中的Bean的实例化

Bean的实例化1. Bean的配置2.Bean的实例化2.1 构造器实例化2.2 静态工厂方式实例化2.3 实例工厂方式实例化1. Bean的配置 Spring 可以被看作是一个大型工厂&#xff0c;这个工厂的作用就是生产和管理 Spring 容器中的Bean。如果想要在项目中使用这个工厂&#xff0c;就需要开发…

Android开发【全面理解Activity】

一、 Activity的生命周期 和其他手机 平台 的应用 程序 一样&#xff0c;Android的应用程序 的生命周期是被统一掌控 的&#xff0c;也就是说我们写的应用程序命运掌握在别人&#xff08;系统&#xff09;的手里&#xff0c;我们不能改变它&#xff0c;只能学习并适应它。 简…