我在进行相关的尝试,用于 AVG 或卡牌手游的开发。
Demo: AVG.js Demo
这是我正在做的开源框架 AVG.js,近期会开源。作为面向 Web 的轻游戏框架,考虑了很多 Web 的特点,也融入了很多来自近几年面包工坊做 BKEngine 的经验。
(实力广告一波:BKEngine - AVG/Galgame游戏引擎 - 免费 易用 高效 安全 跨平台)
在 React 方面主要用了这些:
- 使用 React 封装了 pixi.js
- 通过 react-router 管理界面切换
React 的 vdom 本身对游戏开发确实没什么意义,意义在数据的控制、属性的更新上。
React 的引入让游戏界面逻辑变得有序和便于维护,而不是像以往那样各个精灵实例和功能管理器之间强耦合,事件监听满天飞。
比如,你需要实现「按下按钮X后内容A出现,并且文字B改为xxxx」。若是常规的 pixi.js 开发,你需要知道A和B的实例,并且**在按钮的事件监听中更新他们的属性**,甚至直接在事件处理函数中生成新实例,这就造成了强耦合。
而 React 让这一切反了过来,不是按钮去主动更新,而是让组件各自去根据状态变化来刷新。修改的时候,只需要专注于各个组件本身,而不是为了改A而去X里改代码。这就是数据驱动而非事件驱动所带来的好处。
同时,这也是一种不同于 Unity 式组件化的组件化。
路由替代了传统的场景管理器,换句话说,「跳转到xx场景」变成了「访问xx页面」和「更新局部内容」。相对于场景管理器,路由的粒度更小,同时方便传递复杂的参数。
问题也是有的:
- 其实完全没必要的 vdom-diff 反而降低了性能
- 老生常谈的跨组件问题
- 动态效果
第一个只能靠避免密集调用 setState 解决,重的功能还是要先写原生 class,再封装为 Component。
第二个现在已经不是问题了,Mobx 足够解决了。
最后,动态效果,比如补间动画,也是 React 老生长谈的问题,其实换个思路也能解决,就看团队是否能接受有些不太一样的思路了。
最末尾稍微提一下题主链接里的讨论。vdom 其实不能说是 React 最核心的东西,在我看来,vdom 只是为了解决 DOM 性能问题的一个不得已的方案,当然做得很棒就是了。React 更革命性的东西是引入了单向数据流和状态机的概念,以此让整个前端的**开发思路**都发生了变化。
所以,题主的链接与问题其实不太相关。
可以想一下,Native App 明明也不需要 vdom,那么,React-native 的意义到底在哪?
(p.s. 如果要类比,其实用 react native 比较会比用 react 比较更恰当,在各种意义上都是)
最后打个广告:
未来开源会在这里 AVG.js Project
同时也会在我的专栏 知乎专栏 发布,欢迎关注~