同一 Entity 包含多个同类 Component 的问题 (blog.codingnow.com)

【简介】

ECS 中,同一个 Entity 是否可以由多个同类型的 Component 构成?在 Unity 中,答案是可以。我们的引擎在设计之初也是可以的。
当时有一个问题:在 Lua 中,如何访问同类型的 Component ?如果有多个同类 Component ,最自然的方式是把它们放在一个数组里。但是、绝大多数情况下我们用不上这个特性,每次访问 Component 都加一次 [1] 或 [0] 的数组索引显得画蛇添足。若单个 Component 不用数组,多个才用数组,写起来又有极大的心智负担。因为这样做,它们就成了两个不同的类型。
后来,我们干脆利用 Lua 的特性,把数组和 Component 本身放在一个 table 中。如果有多个 Component 就把这个数组直接放在第一个 Component 的 table 内。就这样用了一段时间后,最后还是受不了这个脏技巧。等到用 C 编写 luaecs 后,就砍掉了这个特性。

点击查看全文 >>

@技术头条 2023-02-12 14:00 / 原作者微博:@简悦云风 / 0个评论
赞过的人: @IT技术博客大学习
要不要再学学下面的文章?
解决Vite打包产生的hash缓存失效问题 (www.iszy.cc)
最近发现无论改多少内容,打包出来的所有文件的 hash 都会发生变化,这样就导致了浏览器缓存失效,每次都要重新加载所有文件,这样就导致了加载速度变慢,而且也浪费我服务器流量,姑且来看看能不能解决。
by @技术头条 2023-11-29 23:46 查看详情
一个任务调度算法引起的性能问题 (blog.codingnow.com)
这两天遇到一个任务调度算法引起的性能问题,花了颇多精力排查和解决。问题出在我写的 ltask 这个 lua 多任务库上。ltask 最初是对 skynet 的一些反思中开始的,最初只是想换一种思路实现 skynet :做一个库而不是框架、更少的锁竞争、避免服务因为消息队列堆积而过载……
by @技术头条 2023-10-24 23:52 查看详情
如何利用链路追踪快速定位问题 (insights.thoughtworks.cn)
随着微服务应用数量的增加,服务与服务之间的调用关系变得复杂,导致系统问题定位困难。链路追踪可通过唯一ID标记请求的整个调用链路,记录每个节点,快速定位问题。
by @Thoughtworks 2023-08-25 11:32 查看详情
优雅的处理Git多帐号与代理问题 (www.iots.vip)
  在工作中,常常会容易遇到一台电脑用多个 Git 账号的场景,比如账号 company 账号是工作用的,而账号 personal 是自己个人用的。 由于 Git 本身并没有多账号的机制,导致我们在默认设置下无法很好的区分哪个仓库使用哪个账号。 同时,在某些众所周知的场景下,我们无法直接访问到 Github 仓库,需要走一层 proxy 来加速我们的代码拉取与推送速度, 本文将使用 SSH config 相对优雅的解决这些问题。
by @技术头条 2023-08-18 23:09 查看详情
分布式数据库的一致性问题与共识算法 (thiscute.world)
谈到分布式数据库,不论是 Etcd/Zookeeper 这样的中心化数据库,还是 Ethereum 区块链这样的去中心化数据库,都避免不了两个关键词:「一致性」跟「共识」。

本文是笔者学习「一致性」和「共识」以及相关的理论知识时记录的笔记,这些知识能帮助我们了解 Etcd/Zookeeper/Consul/MySQL/PostgreSQL/DynamoDB/Cassandra/MongoDB/CockroachDB/TiDB 等一众数据库的区别,理解各数据库的优势与局限性,搞懂数据库隔离级别的含义以及应该如何设置,并使我们能在各种应用场景中选择出适用的数据库。

如果你对区块链感兴趣,那这篇文章也能帮助你了解区块链这样的去中心化数据库,跟业界流行的分布式数据库在技术上有何区别,又有哪些共同点,具体是如何实现。
by @技术头条 2023-07-04 23:33 查看详情
关于 MySQL 新版连接驱动时区对齐问题的研究 (www.diguage.com)
在一个项目开量验证过程中,发现 createDate 字段不正确,比正确时间晚了十四个小时。调研发现,这是一个非常典型的问题。现在把定位问题的思路和解决办法给大家做个分享。
by @技术头条 2023-07-04 23:10 查看详情
一次因为Mac系统升级引发的ssh无法免密登陆的问题 (wiki.eryajf.net)
公司内部安卓与 iOS 打包是通过内部的一台 Mac mini 主机上部署的 Jenkins 完成的,一切都看起来非常优雅且自如。我也正在忙自己的事情,突然一个开发小哥找过来,说发布过程有问题了,其中有一个步骤是在 Jenkins 中打完包之后,将包通过 scp 传到一台 centos 服务器上,从而提供给开发者进行下载。现在出现的问题是,scp 的时候让输入密码了。
by @技术头条 2023-07-04 23:08 查看详情
一次「找回」TraceId的问题分析与过程思考 (tech.meituan.com)
用好中间件是每一个开发人员的基本功,一个专业的开发人员,追求的不仅是中间件的日常使用,还要探究这背后的设计初衷和底层逻辑,进而保证我们的系统运行更加稳定,让开发工作更加高效。结合这一主题,本文从一次线上告警问题出发,通过第一时间定位问题的根本原因,进而引出Google Dapper与MTrace(美团内部自研)这类分布式链路追踪系统的设计思想和实现途径,再回到问题本质深入@Async的源码分析底层的异步逻辑和实现特点,并给出MTrace跨线程传递失效的原因和解决方案,最后梳理目前主流的分布式跟踪系统的现状,并结合开发人员日常使用中间件的场景提出一些思考和总结。
by @技术头条 2023-07-02 23:39 查看详情
短 ID hash 映射的问题 (blog.codingnow.com)
我们正在开发的游戏中,会用一个 id 来表示一个游戏对象到底是什么。比如,“铁片” 是 1 ,“煤” 是 2 ,“采矿机” 是 3 …… 这样,在运行时,C 代码可以根据对象的类型方便的查询对象的属性。而对象的属性则是用 Lua 配置好,在运行期不变的。例如每燃烧一个单位的“煤”,可以产生 100KJ 的热量;一箱“铁片”有 100 个。

为了在 C 和 Lua 间快速共享这些配置数据,我还专门写了一个 cache 模块 。

问题出在 ID 的持久化上。因为游戏中的物品种类并不是特别多,出于时间以及空间性能的考量,我把 ID 设计为 16bits 。64K 种物品种类的上限看起来足够了。但 ID 的分配却比较麻烦。
by @技术头条 2023-04-09 10:06 查看详情
多年老司机,面对这些Go并发问题,也迟疑了 (colobu.com)
Go一向以它的简单易学而著称,我也遇到过同学说只需半天就能掌握Go语言了,两三年的Go开发经验就称专家了。

想比较Rust等编程语言,Go语言的确容易上手,查看Go语言的规范你也会看到,它的语言规范相比较其它编程语言非常的简短,的确可以一个小时就可以读完。但是如果你深入了解这门语言(其它语言也是类似情况),就会发现很多细节的地方,需要花谢心思和时间仔细琢磨琢磨。这不,我先来几道Go并发的源代码考考你,看看你能回答上来不?
by @技术头条 2022-12-18 20:08 查看详情