Skip to content

Commit 7bc2217

Browse files
committed
feat(撤销重做模式): begin
1 parent 679057a commit 7bc2217

File tree

13 files changed

+327
-132
lines changed

13 files changed

+327
-132
lines changed

doc/TODO.org

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -361,6 +361,12 @@ finish TODO
361361

362362

363363

364+
* TODO 前言 补充
365+
366+
add 特点:
367+
- 没有使用任何的引擎库、引擎框架、UI库等,直接使用WebGL图形API
368+
369+
364370

365371

366372
* TODO 书给出网站(包含代码)二维码

packages/ECS模式/article.md

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
## 需求
66

77

8-
我们开发一个游戏,游戏中有两种人物:普通英雄和超级英雄,他们具有下面的行为:
8+
我们需要开发一个游戏,游戏中有两种人物:普通英雄和超级英雄,他们具有下面的行为:
99
普通英雄只能移动
1010
超级英雄不仅能够移动,还能飞行
1111

@@ -350,7 +350,7 @@ worldState的superHeroes中有一个超级英雄数据的position为[6,6,6],
350350

351351

352352
<!-- 通过下面的改进来解决重复和继承的问题: -->
353-
基于组件化的思想,用组合代替继承,具体如下:
353+
- 基于组件化的思想,用组合代替继承
354354
将英雄抽象为GameObject
355355
将英雄的行为抽象为组件,并把英雄的相关数据也移到组件中
356356
英雄通过挂载不同的组件,来实现不同的行为
@@ -867,7 +867,7 @@ worldState的gameObjects包括了4个gameObject的数据;
867867
## 概述解决方案
868868

869869
<!-- 通过下面的改进来提高性能: -->
870-
基于Data Oriented的思想进行改进,具体如下:
870+
- 基于Data Oriented的思想进行改进
871871
<!-- 基于Data Oriented的思想进行改进,将gameObject所有的数据和每种组件的数据分别集中起来,保存在各自的一块连续空间中 -->
872872
<!-- 其中,gameObject的数据是指gameObject挂载了哪些组件,我们将其保存在一个Hash Map中; -->
873873
组件可以按角色分为Data Oriented组件和其它组件,前者的特点是每个组件都有数据,且组件的数量较多,后者的特点是每个组件都没有数据,或者组件的数量很少
@@ -876,13 +876,14 @@ worldState的gameObjects包括了4个gameObject的数据;
876876

877877
将属于Data Oriented组件的三种组件的所有组件数据分别集中起来,保存在各自的一块连续的地址空间中,具体就是分别保存在三个ArrayBuffer中
878878

879-
将GameObject和各个Component扁平化,使得GameObject不再有数据和逻辑了,而只是一个id;Component也不再有数据和逻辑了,属于“Data Oriented组件”的Component只是一个ArrayBuffer的索引;属于“其它组件”的Component只是一个id
879+
- 将GameObject和各个Component扁平化
880+
使得GameObject不再有数据和逻辑了,而只是一个id;Component也不再有数据和逻辑了,属于“Data Oriented组件”的Component只是一个ArrayBuffer的索引;属于“其它组件”的Component只是一个id
880881
<!-- 其中GameObject是gameObject与挂载的组件的对应关系这个Hash Map的Key;Component既是这个Hash Map的Value,又是ArrayBuffer中的索引 -->
881882

882-
我们增加Component+GameObject这一层,将扁平的GameObject和Componet放在该层中
883+
- 增加Component+GameObject这一层,将扁平的GameObject和Componet放在该层中
883884

884885

885-
我们增加Manager这一层,来管理GameObject和组件的数据
886+
- 增加Manager这一层,来管理GameObject和组件的数据
886887
这一层有GameObjectManager和四种组件的Manager,其中GameObjectManager负责管理所有的gameObject;
887888
四种组件的Manager负责管理自己的ArrayBuffer,操作属于该种类的所有组件
888889

@@ -893,7 +894,7 @@ worldState的gameObjects包括了4个gameObject的数据;
893894
考虑到为了方便组件直接就近获得自己挂载到的GameObject,所以我们选择后者
894895

895896

896-
我们增加System这一层,来实现行为的逻辑
897+
- 增加System这一层,来实现行为的逻辑
897898
一个System对应一个行为,比如这一层中的MoveSystem、FlySystem分别实现了移动和飞行的行为逻辑
898899

899900

packages/多线程模式/article.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -382,6 +382,7 @@ TODO tu
382382
## 概述解决方案
383383

384384
<!-- 通过下面的改进来提高性能: -->
385+
- 开渲染线程和物理线程
385386
目前所有的逻辑都运行在主线程
386387
因为现代CPU都是多核的,每个核可以运行一个线程,所以现代CPU都支持多个线程并行运行
387388
因此,可以开一个渲染线程和一个物理线程,其中前者负责渲染,后者负责物理计算

0 commit comments

Comments
 (0)