返回首页
最新
Masthead 是一个开源的出版平台,采用 Elixir 和 Phoenix LiveView 构建。它最初是为了更简单地管理我个人博客的 Hugo 部署而开发的,后来发展成为一个支持多租户、自定义域名、主题和自托管的综合平台。
你好,在过去的一个月里,我对ECS(实体组件系统)学习了很多。
我目前正在从零开始开发一个机器人模拟器(使用Python和Raylib),由于缺乏游戏开发经验,我采用了“完全面向对象编程”的方式。我的场景对象(SceneObject)有很多继承的接口(例如,Collidable、Movable等),这些接口在运行时被继承并固定。
主循环不可避免地变成了:
```python
for scene_object in sim.scene_objects:
scene_object.update(...)
for scene_object in sim.scene_objects:
scene_object.draw(...)
```
结果发现,如果场景对象数量很多,这可能会成为瓶颈,因为计算机喜欢连续的内存来进行缓存、物理计算/数学向量化等。
最近我学习了更多关于ECS的知识,开始在一个沙盒环境中进行一些实验,将update()函数转变为ECS。我的想法是将数据存储在列式的numpy数组(组件)中,并进行许多数据结构优化,以便快速查询场景对象和快速访问,例如:
```python
qr = scene.query(HasMotion, HasPosition) # 查询结果像一个形状为(N, ...)的numpy数组
qr.position += ... # 像numpy一样操作/向量化
```
无论如何,这个独立库只需要Python和numpy。Raylib仅用于渲染,但原始数据结构并不需要它。
我希望能得到一些反馈,比如它缺少什么,或者在模拟器开发过程中我可能会遇到的陷阱。
作为一个小插曲:我把Claude当作“工程经理”,我自己编写代码,它负责代码审查、任务管理和测试(对于边缘案例非常有用)。
[1] [hytale的ECS视频(适合初学者)](https://www.youtube.com/watch?v=qglU107_DA4)
[2] [Casey Muratori关于游戏行业第一个ECS的最新视频](https://www.youtube.com/watch?v=73Do0OScoOU)
从小我就被开了兴奋剂来“治疗”严重的注意力缺陷多动症(ADHD)。当时我大约7岁,根本不知道发生了什么,也从未真正质疑过这一切。快进18年:经过大量的自我反思,我很高兴地说我并不处于我想要的状态。
兴奋剂是有代价的。
我逐渐意识到,患有ADHD的人通常是:
- 观察力强
- 社交能力好
- 通才
我也注意到自己是:
- 专才
- 僵尸
- 反社交
“锁定”= 专才。
我讨厌专业化。它很脆弱。历史上,通才一直占据主导地位。企业家是通才。我想成为一名企业家。
我现在在一份工作中,软件工程师。我常常在想,如果我停止使用兴奋剂,我该怎么办?我对自己现在的生活完全不满意。我会找到摆脱这种状态的方法。
我并不是一个内向的人,但我却像一个内向者一样成长。这种感觉很孤独,看到别人社交却奇怪地感到格格不入。
我通过反复试验确认了这一切。停止使用兴奋剂,再重新开始。
在20多岁时发现自己与想象中的完全不同,真是一种奇怪的体验。
当你第一次以原始的视角看待世界时,它变得美丽。食物的味道变得美妙。时刻变得神奇而强大。让人发笑并进行深入交谈的感觉令人愉悦。我不相信有很多人能如此突然地体验到这种差异。