File tree Expand file tree Collapse file tree 5 files changed +70
-18
lines changed
ecs_pattern_role_abstract Expand file tree Collapse file tree 5 files changed +70
-18
lines changed Original file line number Diff line number Diff line change 1+ # 如何运行代码
2+
3+ 不能运行
Original file line number Diff line number Diff line change 1+ # 如何运行代码
12
2- 这里与之前一样,我们将一个GameObject的数据保存在一个state中,然后用一个索引与其关联。具体就是:
3- gameObject其实就是一个number类型的id值,
4- gameObjectState保存了一个GameObject的数据
5- gameObject与gameObjectState一一关联,这个关联体现在前者是WorldState->gameObjects这个Hash Map的Key,后者是它的Value
3+ ``` js
4+ npm run client
5+ ```
66
7- <!-- World封装了操作GameObject和组件的API -->
7+ # 代码说明
88
9+ 跟之前一样,我们将一个GameObject的数据保存在一个state中,然后用一个索引与其关联。具体就是:
910
11+ - gameObject其实就是一个number类型的id值
12+ - gameObjectState保存了一个GameObject的数据
13+ - gameObject与gameObjectState一一关联,这个关联体现在前者是WorldState->gameObjects这个Hash Map的Key,后者是它的Value
1014
15+ <!-- World封装了操作GameObject和组件的API -->
1116
1217组件与GameObject一样,我们将它的数据保存在一个state中,只是不需要索引。所以一个组件就等于一个组件state
Original file line number Diff line number Diff line change 1- 我们将一个英雄的数据保存在一个state中,然后用一个索引与其关联。具体就是:
2- normalHero、superHero其实就是一个number类型的id值
3- normalHeroState、superHeroState分别保存了一个普通英雄、一个超级英雄的数据(比如position、velocity)
4- normalHero与normalHeroState一一关联,这个关联体现在前者是WorldState->normalHeroes这个Hash Map的Key,后者是它的Value
5- 同理,superHero与superHeroState关联
1+ # 如何运行代码
2+
3+ ``` js
4+ npm run client
5+ ```
6+
7+ # 代码说明
8+
9+ 我们将一个英雄的数据保存在一个state中,然后用一个索引与其关联。具体就是:
10+
11+ - normalHero、superHero其实就是一个number类型的id值
12+ - normalHeroState、superHeroState分别保存了一个普通英雄、一个超级英雄的数据(比如position、velocity)
13+ - normalHero与normalHeroState一一关联,这个关联体现在前者是WorldState->normalHeroes这个Hash Map的Key,后者是它的Value
14+ - 同理,superHero与superHeroState关联
615
Original file line number Diff line number Diff line change 1+ # 如何运行代码
12
2- 值得注意的是:
3- 将“gameObject挂载了哪些组件”的数据放在哪里?
4- 它们可以放在GameObjectManager中,也可以分散地放在各个组件的Manager中。
5- 考虑到为了方便组件直接就近获得GameObject挂载的其它组件,所以我们选择后者
6- 组件的Manager可以通过“挂载的gameObject”、“gameObject挂载了哪些组件”这两个数据来获得GameObject挂载的其它组件
3+ ``` js
4+ npm run client
5+ ```
76
7+ # 代码说明
88
99
10+ 值得注意的是:
1011
11- TODO remove?
12- 值得注意的是:
13- 因为“gameObject挂载了哪些组件”的数据(如这里的gameObjectPositionMap)是放在组件的Manager(如这里的PositionComponentManager)中的,所以挂载组件的代码也放在组件的Manager(如这里的PositionComponentManager)而不是GameObjectManager中
12+ - 将“gameObject挂载了哪些组件”的数据放在哪里?它们可以放在GameObjectManager中,也可以分散地放在各个组件的Manager中。考虑到为了方便组件直接就近获得GameObject挂载的其它组件,所以我们选择后者。组件的Manager可以通过“挂载的gameObject”、“gameObject挂载了哪些组件”这两个数据来获得GameObject挂载的其它组件
13+ - 因为“gameObject挂载了哪些组件”的数据(如gameObjectPositionMap)是放在组件的Manager(如PositionComponentManager)中的,所以操作“GameObject和挂载的组件”的代码也放在组件的Manager(如PositionComponentManager)而不是GameObjectManager中
Original file line number Diff line number Diff line change 1+ # 《3D编程模式》
2+
3+ 本书是开源书,罗列了我从自己的实战项目中提炼出来的关于3D编程(主要包括“3D引擎/游戏引擎”、“编辑器”开发)的各种编程模式
4+
5+ 本书作者:杨元超
6+
7+ ** [ 在线阅读] ( TODO ) **
8+
9+
10+ ## 源码索引
11+
12+ 要想运行源码,请在Clone本仓库后,先在仓库根目录执行下面的命令:
13+ ``` js
14+ npm install
15+ npm run bootstrap
16+ ```
17+ 安装了yarn的同学可以执行下面的命令来替代上面的命令:
18+ ``` js
19+ yarn
20+ yarn bootstrap
21+ ```
22+
23+
24+ 下面是各个模式的源码索引:
25+
26+ - ECS模式源码
27+ - [ 普通英雄和超级英雄] ( ./ECS模式代码/story_before/README.md )
28+ - [ 基于组件化的思想改进] ( ./ECS模式代码/story_after/README.md )
29+ - [ 使用ECS模式来改进] ( ./ECS模式代码/story_improve/README.md )
30+ - [ 抽象代码] ( ./ECS模式代码/ecs_pattern_role_abstract/README.md )
31+
32+
33+ ## 版权许可
34+
35+ 本书采用“保持署名”创意共享 4.0 许可证。只要保持原作者署名,您可以自由地阅读、分享、修改本书。
You can’t perform that action at this time.
0 commit comments