Mojoc 是一个开源(MIT License),跨平台,使用C语言编写的游戏引擎。基于OpenGLES3的渲染和C99的语法写成。目前,可以跨平台工作在Android和IOS上,也很容易扩展到其它平台。GitHub地址:scottcgi/Mojoc

核心理念

保持简单,追求简单,简单充满了力量。而简单的背后,是更多的思考,实践与重构。

主要特性

  • 所有的代码实现,只是用了C语言和C99的语法特性。
  • 在平台独立的代码中,只使用了C语言的标准库,其它的功能手动实现。
  • 使用了具有独特风格的C语言代码书写格式,C代码风格。
  • 使用了非常简单,轻量级的,OOC面向对象抽象模型,C面向对象编程。
  • 基于一种组件,状态机,消息驱动,三合一的游戏逻辑架构,C面向组件编程。
  • 更多的代码特性可以参看这里,Code Details。

后续的文章里,会介绍代码风格,编程模型的细节。包括设计的考虑和演变过程,以及使用时候的感受。

架构概况

简单说明

为什么使用C语言而不是C++ ?
  • 已经有大量的C++游戏引擎,已经是重复造轮子了,不如选有点不同的方式。如果是要用C++写游戏引擎,编写动力可能就没有那么大了。就是觉得C写游戏引擎有意思。

  • 游戏引擎是个复杂的东西,如何做到简单与简洁 ?C语言就是一个古老而简洁的语言,本身复杂不起来,所有的复杂是来自于人脑。所以使用C言语,仅仅需要面对的就是降低人脑的复杂,这是有趣的部分和过程。

  • 曾经,我对C语言编写复杂的项目,积累了一些特别的想法和感觉。很想找个机会验证这些想法。

  • 受到 “Doom启示录” 的影响,卡马克最开始的引擎全是C语言写的。想体验一下,在湖边的小木屋,外面电闪雷鸣,风雨交加,湖水上涨,而我在黑屋子里,用C语言疯狂编译迭代的感觉。

Mojoc名字的由来 ?
Mojoc = Mojo + C (C语言)

Mojoc的Logo和意义 ?

M:   耳朵
OO:  眼睛
J:   身体
C:   尾巴

Mojoc的编写过程

这个引擎开始于2012年,主要是业余时间开发的。一开始就没有打算写着玩玩,如果这样动力也没有那么大,初衷就是想要写一个真正能支撑开发游戏的引擎,然后用这个引擎开发自己的游戏发布。

一直的定位就是手机平台,复杂的我也做不来,时间精力经验有限。开始使用,Eclipse + CDT + ADT + NDK 专注于Android平台。蹩脚的编辑器,蹩脚的工具链,蹩脚的代码提示,蹩脚的编译过程,但凑合着就是能用。

开发的过程,充满了纠结与反反复复。主要是设想与实践的碰撞,产生不断重构的过程,期间感受指引着思路,慢慢变的清晰。 说起来寥寥几句,但实际上是很艰难的,因为很多问题并没有对与错,只有选择与取舍,时间会让结构崩塌,然后在废墟之上,显现一条从未想到过的路。路与路之间不断的交叠,覆盖与串联,真的很难保持简洁与简单,仿佛宇宙中充满一种无形的力,在促成无序与混乱。效率,性能与结构的清晰,代码的可阅读性,都在互相拉扯。而所有的一切选择,都是构建在,大脑虚幻的确定感与自以为是之上。哪一天,一个公式,一个测试,一本书,一篇文章,一个新观点,新想法,新知识,就推翻了一切。墙倒了,楼没了,搬砖的重构又开始了。

好在最后的最后,基本完成了最初的设想,有时候我会觉得,生活和人生都被这个引擎给卡主了。如果不能完成,并在此之上构建一个游戏,我的人生就完了,付出了很多的努力和时间,无论如何都需要给自己一个交代,不是别的,而是一个简单的句号。

总之收获是很多的,不仅仅是编程方面的收获,最重要的是看清了自己,看到了人脑虚幻的确定感,事物在细节上构建的不确定性与随机的自由组合,时间是如何用互相矛盾的东西在纠结中创造发展事物的。在结合,黑天鹅,信息简史,思考的快与慢等几本书,还有人类简史与未来简史,让我对编程工作也有了新的理解。以后会把感受和收获总结出来,写成文章,放到这个专栏里:闪念与认知。

Mojoc能开发什么样的游戏

事实上,这只是引擎第一个版本。有很多很多需要改进和增加的功能。目前,勉强可以做一些简单的2D小游戏,能跨IOS和Android两个平台,编辑器使用了一些第三方现成的,比如spine骨骼动画(我用引擎自己实现了它的运行时)。

重要的是,引擎的结构,C语言的编程模型和代码风格,这些都是确定的,在实践中不断调整修改而来的。未来的扩展,也是在这个固定的架构之下完成的。比如,添加第三方库的规范和目录结构,实现第三方工具的数据读取和运行时,切换渲染API的实现,增加游戏逻辑功能的组件,添加3D功能,增加跨平台的数量,或是实现自己的编辑器等等。

引擎结构简单清晰,模块化,层层递进,每一层都可以自由扩展。给出了C语言的统一编写规范和抽象模型,可以保证C语言的表达是简洁明了,没有黑魔法的。只需要C99的知识就可以掌握和理解Mojoc,哪怕随着引擎不断的扩展复杂化,也不会改变这一点。

所以,我觉得引擎实现的可用功能,是简单甚至是简陋的,只保持了最基本的可用性。但有大量的内涵和细节是值得了解的。比如,我就实现了一个C语言标准库之上的一个工具箱,包括数学库,基本数据结构,Json解析器,Tween动画的完整实现,协程,简单的物理碰撞等等。比如跨平台的声音解决方案,跨平台的文件操作方案,很多扩展的工作都只是在同样的模式下,进行重复而已。更多细节的可以参看:Code Details。

完成的游戏

这个游戏是简单且难度非常变态的,其本身就是为了引擎而制作的,把引擎的API都调用一遍,能跑起来玩起来算是一种测试了。同时,我把这个游戏源代码进行了一些剪裁,放在了Sample里面,可以切实看到Mojoc是如何运行的。下载地址如下:

  • App Store
  • Google Play
  • Tap Tap
开发路线图

这部分就不展开了,计划原本是十分宏伟和充满野心的,但现实总在做一种平均值的回归,无论是个人能力,还是人生的曲折,还是生命的长度,亦或是DNA的蓝图。计划在这里Mojoc Roadmap,有时间就慢慢去实现了,没时间就在等一等。


「Mojoc是一个理想」

「游戏引擎Mojoc」(1)简介相关推荐

  1. 「游戏引擎 浅入浅出」项目介绍

    「游戏引擎 浅入浅出」是一本开源电子书,PDF/随书代码/资源下载: https://github.com/ThisisGame/cpp-game-engine-book 项目介绍 README 本书 ...

  2. 「游戏引擎 浅入浅出」前言

    「游戏引擎 浅入浅出」是一本开源电子书,Github地址: https://github.com/ThisisGame/cpp-game-engine-book 为什么写这本书? 在与同事沟通时,会提 ...

  3. 「游戏引擎 浅入浅出」1. 游戏引擎框架介绍

    「游戏引擎 浅入浅出」是一本开源电子书,PDF/随书代码/资源下载: https://github.com/ThisisGame/cpp-game-engine-book 目前市面上的游戏引擎比较多, ...

  4. 「虚幻引擎5」为何让开发者们拍手叫好?它到底厉害在哪?

    Epic 在昨天公布其最新次世代引擎「虚幻引擎5」,并重点介绍了新引擎的两项新技术 Nanite 和 Lumen.下面给大家简单介绍一下这两个新技术到底厉害在哪里,以及为什么许多游戏开发者们看完之后纷 ...

  5. 「游戏资产上链」毫无价值?

    导读:关于资产上链是否有意义的争议由来已久,一部分人误解了资产上链的概念.它首先是一个动作,上链让虚拟道具的性质无限逼近于实物资产,就像小浣熊水浒卡片.小时候传给初恋的纸条.但如果要它成为一个商业模式 ...

  6. 7.从零开始手敲次世代游戏引擎(图形API封装简介)

    现在我们已经有了一个跨平台的基本应用框架.接下来我们可以开始图形方面的编码了. 参照我们编写应用模块的方式,我们可以很快地添加图形模块的骨架. 让我们在Framework/Common下面添加两个文件 ...

  7. 5 年营收超 50 亿美元,「宝可梦」游戏是怎么做到的?

    本文转载自极客公园 仅用了一个 GPS 定位,就在游戏领域长出了一个新巨头 近日,时值<精灵宝可梦 Go>(Pokemon Go,以下简称<宝可梦 Go>)五周年之际,数据显示 ...

  8. 编码、学习、玩耍一条龙,这是我看过最良心的「游戏编程」网站,没有之一!...

    公众号关注 "GitHubDaily" 设为 "星标",每天带你逛 GitHub! 大家好,我是小 G. 你是否设想过,在未来的某一天,凭借自己的双手,去创造一 ...

  9. GAMES104实录 | 游戏引擎导论(中)

    本期为GAMES104<现代游戏引擎:从入门到实践>视频公开课文字实录第2期.本课程由GAMES(图形学与混合现实研讨会)发起,游戏引擎技术专家王希携手游戏引擎一线开发者共同研发. 课程共 ...

最新文章

  1. 数据挖掘十大经典算法之——PageRank 算法
  2. linux创建自定义组件qt,关于QT自定义控件
  3. clickhouse hadoop_ClickHouse如何实现存算分离?
  4. 8s保留cpu设置_使用资源设置控制CPU资源
  5. Linux使用openssl实现RSA非对称加密
  6. C语言实现九九乘法表(四种情况)
  7. 精益软件开发(Lean Software Development)
  8. Matlab——线性规划模型
  9. 50k热敏电阻温度对照表c语言,50K热敏电阻温度表
  10. oracle中的删除与数据库中的回收站
  11. 如何快速理清大型项目业务逻辑
  12. a simplest example of sql select used in excel vba
  13. java -jar -xx_java 启动方式 java -jar xx.jar
  14. php 配置 error_reporting,关于php中的错误配置display_errors与error_reporting说明
  15. margin设置百分比
  16. 小练习 用python实现最简单的人工智能
  17. 拥抱开发过程中的“黑天鹅”
  18. 《Essential Linux Device Drivers》中文版第1章
  19. 屏幕点亮测试软件设计,Pixel Ruler(屏幕测量工具)
  20. 2018京东项目经理实习生面试经验

热门文章

  1. 暖火柴打一数字_火柴
  2. MacOS系统Appium安装与配置
  3. 如何通过软文营销获得流量红利?
  4. 计算机的优势和劣势_什么是计算机二级证书?它比你想象中有用多了!
  5. 公链前沿研究的三大视角 |硬核系列
  6. 心灵鸡汤 - ninth (9th)
  7. 人物专访 | 《行尸走肉》特效的制片人之一——Matilda Olsson
  8. 湖南计算机高等专科学校高考分数线,刚刚!2019年湖南高考分数线出炉!
  9. Qt快速读取Excel文件
  10. 环形队列的输出_数组实现环形队列