Mickey 写了一篇 《一个本科毕业生创业两年的感悟》,从他的视角,总结了我们合作的两年经历。

我也来写一篇,介绍我的学习之路,希望对大家有所帮助,谢谢大家~

我的学习方法

1.直接从0开始做项目,边做边学习,在做的过程中不断思考和反思当前的设计和实现,不断地修正,不断地迭代。
2.做完一个项目后,沉淀和升华:
a)根据做项目中遇到的问题,针对性地看一些经典书籍和学习资料
b)写一些文章,分享自己的学习经历和技术心得

我的学习经历

我从开始学编程到现在,一直都在前端领域学习。先后经历了开发网站->开发2D游戏和引擎->开发前端富应用->开发3D引擎和编辑器。

第一年从0开始,做一个行业平台的网站

非常感谢老师对我的信任,让我能在第一个项目就负责开发一个比较大规模的完整网站~

整个项目历时8个月,前端、后端、数据库我都要开发。

通过该项目,我学习了测试驱动的思想(后端和逻辑层写了很多测试)、分层架构、MVC、重构、领域驱动的思想,学习了前端、后端、数据库的技术。

从0开始,做Html5小游戏

再次感谢老师的支持,让我能够自由地研究自己感兴趣的内容。

做完网站后,我先后开发了 贪吃蛇->连连看->炸弹人 这三个Html5游戏,中间又做了几个小网站。 其中,我完全使用测试驱动来开发炸弹人游戏。

详见:
发布我制作的jQuery贪吃蛇游戏
连连看
炸弹人游戏开发系列

通过做游戏,我学习并应用了面向对象的思想和设计模式,学习了2D游戏中的基本概念和领域模型。

从炸弹人游戏中提炼2D引擎

从做的游戏中,我看到了一些通用模式,促使我开始提炼游戏引擎。

详见:
提炼游戏引擎系列
发布HTML5 2D游戏引擎YEngine2D

开发一个相对复杂的2D游戏,作为我的毕业设计

在拿到工作Offer后,我就开始毕业设计:使用提炼的2D引擎,开发一个即时战略的2D游戏。我还开发了对应的编辑器,用来编辑地图和关卡。

详见:
发布HTML5 RTS游戏-古代战争

分享我在读书阶段收集的经典书

我在上学的时候,通过边做项目边学习,看了一些书。

此处分享我看了哪些书、看了几遍、有什么心得,详见:2011-2014年收集的经典书和心得

WebGL、3D引擎等方面可以参考:

分享收集的WebGL 3D学习资源

分享我收集的引擎、图形学、WebGL方面的电子资料

开发最后一个2D游戏

我用提炼的引擎写了个demo。

详见:
动作类游戏demo

开发钉钉

在工作上,我有幸加入了钉钉的前端开发团队,参与桌面版钉钉的开发。

我学习了Angular,开发了搜索、群组、快捷键等功能。

通过参与该项目,我学习了一个真正的商业项目是怎样开发的,也学习了前端的更多技术,感谢项目老大~

开始学习3D

此时我看到了Babylonjs的3D demo,非常震撼。我已经迫不及待地想要学习3D技术了!我加入了北京的一个创业公司,开始接触WebGL技术。

感谢该公司,技术上对我有很多启发~比如我第一次看到了类似于Unity的组件化架构的引擎,而我之前一直参考Cocos 2D,用的是继承架构。我也学习了使用渲染命令队列来解藕逻辑和渲染的设计思想。

我是如何开始学习WebGL的呢?
1.我找到了《WebGL编程指南》这本书,把大部分demo实现了一遍;
2.再次第二遍实现demo,提炼3D引擎的雏形;
3.用提炼的引擎实现了一个“自由浏览场景”的demo。

开发引擎

通过学习3D,我感受到了3D引擎的巨大魅力,我决定自己开发一个3D引擎!

辞职,回家,从0开始,开发3D引擎。

我学习了函数式反应编程的思想,模仿Rxjs,写了个Wonder-FRP库,这就花了我1个月的时间,为我以后学习函数式编程埋下了伏笔。

我出于学习的目的,尽可能地加入更多的功能(模型,动画,地形,水,阴影。。。。。。),并没有考虑给别人使用。

虽然引擎是全覆盖的单元测试用例,并且我注重代码质量,但是性能方面没有过多地优化,也没有外部的使用反馈。所以引擎属于自己玩的玩具。

短暂的工作

开发了一年后,我认为需要到外界获取一些反馈和交流,所以我参加了工作,并在工作中收集相关反馈,继续改进引擎。

我用引擎做了一些demo,并开始应用到手机端。

同事反馈:引擎太笨重,应该更加地模块化。感谢同事对引擎的改进建议,让我看到了引擎很多的不足。

再次出发

辞职,回家,我决定重写引擎。

此时我开始学习函数式编程的思想,这再次刷新了我的认知。因此我从面向对象切换到函数式编程,开始重写设计引擎,立足于真正的商业应用,能够支持大型场景:
1.使用js库,进行函数式编程
2.支持多线程
3.支持WebGL2
4.支持延迟渲染

与Mickey合作,一起开发Wonder产品

随着Mickey的加入,我们开始真正的创业:开发引擎和编辑器,打造Wonder,建立Web 3D生态。
我继续开发引擎,Mickey开发编辑器。

再次重写

开发一段时间后,我认为js库进行函数式编程非常不方便,代码不好看,而且性能也不好。

我关注到Reason的发展,认为Reason已经足够成熟,可以使用了。

于是我们引擎和编辑器完全重写,从Typescript切换到Reason,使用Data Oriented设计,开始真正的函数式编程。

Wonder发布1.0

从重写到发布,《一个本科毕业生创业两年的感悟》已经很好地总结了这段时间的经历。

终于,Wonder 1.0正式版发布,完成了我们创业的第一步,交付了第一个可以真正使用的产品。

从学习3D,到发布1.0产品,经历了4年。

我们的引擎和编辑器开源,详见:
Wonder.js引擎
Wonder-Editor编辑器

未来。。。。。。

我们会继续开发Wonder 2.0版本,打造和完善Web 3D生态,为大家带来更多的便利和服务。

详见路线图。

我为什么一直走这条路?

因为兴趣,就会自发地想去学习,每天都有兴奋感。解决一个个问题后,也很有成就感。

我也看好Web 3D的潜力,这是一个有技术门槛,需要长期钻研,厚积薄发的领域,很适合我。

感谢互联网的便利,所有相关的知识都可以在网上搜索到。所以现在是最好的时代,能走到哪里全凭自己驱动。

我要走向何方?

我们做的Wonder产品-3D引擎和编辑器,技术上很有挑战,永无止境,这不就是对我最好的礼物吗?

我会持续地学习3D开发,把Wonder打造成世界上成熟的产品,让Web 3D开发变得轻而易举,为世界作出贡献。

致谢

感谢您能阅读到这里,每天都是最好的一天!

最后附上Wonder编辑器

2d游戏引擎_8年,从2D到3D,我的学习之路相关推荐

  1. Android 2D游戏引擎

    前言 Android游戏在App Market上是最火的一类应用,但是和iPhone游戏相比,Android游戏还有很大差距,除了与Android手机的市场占有率不高有关以外,Android游戏开发的 ...

  2. Android 2D游戏引擎1

    前言 Android游戏在App Market上是最火的一类应用,但是和iPhone游戏相比,Android游戏还有很大差距,除了与Android手机的市场占有率不高有关以外,Android游戏开发的 ...

  3. 配置JDKAndroid 2D游戏引擎AndEngine

    配置JDKAndroid 2D游戏引擎AndEngine JDK全称为Java Development Kit(也即Java开发包),是用于支持Java 编程的基础.无论是什么编程,只要用到了Java ...

  4. Android 2D游戏引擎AndEngine配置环境

    Android 2D游戏引擎AndEngine配置环境 1.2  配置环境 在任何编程中,都需要一些软件或者硬件的支持.否则,没有硬件软件是不可能存在的,而想要编写对应语言的的程序,这需要对应语言库和 ...

  5. 认识AndEngine选自Android 2D游戏引擎AndEngine快速入门教程

    认识AndEngine什么是AndEngine 随着Android手机.平板的盛行,Android下的游戏也不断的变得火热.而对于游戏开发有兴趣的同学们,应该也想要学习开发游戏.虽说游戏开发的引擎较多 ...

  6. Android 2D游戏引擎AndEngine快速入门教程

    Android 2D游戏引擎AndEngine快速入门教程 介绍:AndEngine是一款知名的Android 2D游戏引擎.该引擎代码开源,并且可以免费使用.本书详细讲解如何使用AndEngine引 ...

  7. 开发2d游戏要用什么引擎_下一个游戏要使用什么2D游戏引擎

    开发2d游戏要用什么引擎 A few weeks ago, I posted about my experience attempting to make a prototype in a bunch ...

  8. 【Rust日报】2023-01-07 shura-一个安全的2D 游戏引擎,易于创建易于管理的游戏

    shura-一个安全的2D 游戏引擎,易于创建易于管理的游戏 shura是rust编写的一个安全,快速并且跨平台的游戏框架.shura使用一个2D组件系统.场景管理和group系统帮你管理一个大型游戏 ...

  9. Java 2D 游戏引擎开发(一)

    以前就想用java做桌面端游戏,基于awt和swing,这样可以在轻易的跨平台运行,同时还比Python,Javascript之类的高效.不过很可惜,一直没有找到一个合适的java写的2d游戏引擎.前 ...

最新文章

  1. 什么是枚举,为什么有用?
  2. 33个非常有创意的404错误页面设计
  3. MySQL:从B树到B+树到索引再到存储引擎
  4. 高手与菜鸟,思想与技术
  5. python词云安装什么库_python词云安装什么库
  6. mysql默认字符集和排序_MySQL字符集和排序规则
  7. Appium+Python移动端(Android)自动化测试环境搭建原来没有那么难!+ 带你实战去
  8. Windows 与 Linux 通过Xshell 文件互传
  9. [ An Ac a Day ^_^ ] CodeForces 680A Bear and Five Cards
  10. 【redis 封装】
  11. mybatis plugins_[Mybatis]-[基础支持层]-插件-多个插件执行顺序
  12. Android AlertDialog创建过程详解
  13. 安卓基础干货(六):安卓Activity的学习
  14. 两张表合并加标识根据ID
  15. transition animation
  16. PhoneGap + Dreamweaver 5.5 无法在模拟器中打开的问题
  17. java beanshell_jmeter进阶之Beanshell引用Java代码
  18. 国际域名转出与ICANN投诉流程(完结篇)
  19. bulma css 中文,Bulma CSS - CSS类
  20. 做最好的自己 -- 读后摘录

热门文章

  1. js工作笔记002---检测当前是不是触摸设备(移动设备)
  2. 杭电2571 命运
  3. CUHK interview in Shen Zhen
  4. c语言用栈输出迷宫所有路径,如何在迷宫中使用到栈
  5. java 整型变量,Java 整型变量
  6. 随想录(产品-工程开发-算法)
  7. linux驱动编写(nand flash驱动)
  8. python编程(你的电脑能够执行多少线程和进程)
  9. 随想录(windows和linux进行socket通信)
  10. 安全是什么意思_进衡水火车站要转着圈找门!这是什么意思……清扫车路边倒水 既浪费又不安全...