Mojoc是一个开源(MIT License),跨平台,使用C语言编写的游戏引擎。基于OpenGLES3的渲染和C99的语法写成。目前,可以跨平台工作在Android和IOS上,也很容易扩展到其它平台。源代码托管在GitHub。核心理念是:保持简单,追求简单,简单充满了力量。而简单的背后,是更多的思考,实践与重构。
主要特性:
所有的代码实现,只是用了C语言和C99的语法特性。
在平台独立的代码中,只使用了C语言的标准库,其它的功能手动实现。
使用了具有独特风格的C语言代码书写格式。
使用了非常简单,轻量级的,OOC面向对象抽象模型。
基于一种组件,状态机,消息驱动,三合一的游戏逻辑架构。
内容来源:Solidot
C 语言实现协程,最困难的部分就是上下文信息的保存和还原。这样才能够做到,让协程在任意位置让出执行权限,稍后再恢复到中断位置继续执行。C 实现协程一般有几个方案。 使用第三方库来保存恢复上下文数据,比如ucontext。 使用汇编来保存上下文信息。 使用setjmp / longjmp 保存恢复上下文信息。 使用switch case的特性来做上下文断点继续,上下文信息需要用static变量保存。
Android NDK开发native app官方提供了一个胶水层,android_native_app_glue,NDK的demo里给出了示例,如何使用胶水层开发native activity。 但我发现这个胶水层不好,过于复杂,过度封装,代码质量不高。于是经过研究,直接使用ANativeActivity的接口,重写一个自己的胶水层。 Mojoc里重写的层是NativeGlue.c,经过测试完全
用C语言进行面向对象编程,有一本非常古老的书,Object-Oriented Programming With ANSI-C。1994出版的,很多OOC的思想可能都是源于这本书。但我觉得,没人会把书里的模型用到实际项目里,因为过于复杂了。没有必要搞出一套OOP的语法,把C模拟的和C++一样,那还不如直接使用C++。 Mojoc使用了一套极度轻量级的OOC编程模型,在实践中很好的完成了OOP的抽象。
Mojoc提供了一个通用的工具类,来调用Android Java代码,以实现特定平台的功能。这个工具类封装了JNI使用的繁琐细和上下文对象的获取,提供了简单直接的API专注于Java类和方法的访问,并且实现了任意类型Java方法的调用。 本文将会介绍以下几点: NDK NativeActivity的JNI上下文对象获取。 JNI中JNIEnv指针的使用和理解。 根据路径获取Java类对象。 调用任
代码风格的问题,很微妙,也很有趣。因为它并不影响代码的运行和功能,但它连接着人的心灵和信仰。代码风格目的简单明确,就是增加代码的可阅读性,降低维护成本,减少心智负担。纠结的地方在于,每个人对“可阅读性”的理解和喜好不同。专注容易产生喜爱,喜爱容易滋生癖好,代码写的越多,越会形成个人风格习惯。而逻辑性,还容易在大脑中创造强迫症的倾向,所以代码风格会演变成信仰,难以动摇。 因为代码风格不喜欢,很可能就
泛型ArrayList是基础的数据结构,然而在C的标准库里并没有提供,所以需要自己手动实现一个。Mojoc的ArrayList实现经过了实践的测试,达到了稳定和高效的状态,源码ArrayList.h。 本文主要介绍实现思路和一些特性,Mojoc的泛型ArrayList主要完成了以下几个功能: 存取放任意数据类型。 动态内存扩展。 针对栈数据与堆数据不同的存储策略。 一组简洁的数据操作接口。 利用宏
实践中,发现面向组件-状态机-消息驱动,如果整合起来,能够更加自然和简单的进行抽象。这些都是以面向对象为基础,更进一步的抽象扩展。最初的灵感是在看这本书的时候产生的,Practical UML Statecharts in C/C++, Second Edition。本文会分别简单介绍一下,面向组件,状态机,消息驱动的各自特点。然后,结合Mojoc的代码,看看是如何把三者整合起来的使用的。 面向组
按照以下步骤,可以快速直观的了解Mojoc引擎结构和功能。 第一步 获取源代码,有三个选项。 Git 地址 https://github.com/scottcgi/Mojoc.git 下载源代码压缩包https://github.com/scottcgi/Mojoc/archive/master.zip 下载已发布的版本 https://github.com/scottcgi/Mojoc/rele
字典映射是最基础,最重要的数据结构,通常会利用哈希表来实现。Mojoc提供了另外一种形式的实现,通过数组和二分查找策略,来完成字典数据的映射。源代码在这里:ArrayStrMap.h。 原理 字典映射的核心在于,如何把一个字符串,通过某个策略映射到一个唯一的标识上。利用hash算法生成hash code,然后映射到数组index上就是一种方法。Mojoc ArrayStrMap的思路很简单直接,就
发布到 Web 平台 安装配置原生开发环境 打包发布原生平台 原生平台 JavaScript 调试 发布到支付宝小游戏 发布到微信小游戏 微信小游戏开放数据域 启用微信小游戏引擎插件 接入微信 PC 小游戏 发布到趣头条小游戏 发布到百度小游戏 百度小游戏开放数据域 发布到 Facebook Instant Games 发布到 Google Play Instant 发布到 OPPO 小游戏 发布
所有现实都是游戏。 Iain Banks,《The Player of Games》 我最初对电脑的痴迷,就像许多小孩一样,与电脑游戏有关。我沉迷在那个计算机所模拟出的小小世界中,我可以操纵这个世界,我同时也沉迷在那些尚未展开的故事之中。但我沉迷其中并不是因为游戏实际描述的故事,而是因为我可以充分发挥我的想象力,去构思故事的发展。 我并不希望任何人把编写游戏作为自己的事业。就像音乐产业中,那些希望
为什么我投c++给我发游戏开发的笔试 第一题打家劫舍变形,要么内存超,要么超时,做了40来分钟,a了。 第二题,简单的滑动窗口,a了 第三题没时间了,看了一眼没思路,交了算了 给个见面试官的机会吧
问题内容: 我最近一直在研究游戏开发,而我的第一种编程语言是Java。在玩了许多用c ++开发的令人惊叹的游戏之后,我想知道为什么Java在游戏行业中没有被大量使用。我查看了jMonkeyEngine 3和其他一些游戏引擎环境,但是看到的屏幕截图远没有那么令人惊叹。诸如EA的《极品飞车》(Need for Speed Hot)和ubisoft的Assassins Creed等标题传达了这种现实感。
时间线: 一面:面完通知进行二面 二面:通知进行三面 三面:沟通offer 回顾面试的问题: 1.选择游戏行业的原因? 我对游戏不是只是喜欢,而是热爱。我熟悉市面上各款主流游戏,我觉得玩游戏需要有策略的玩。我经常关注所玩游戏的论坛、贴吧、官网、公众号等,会仔细看游戏的测评文,攻略文、以及公告文等文章。 2.从哪些方面进行游戏测评? 从游戏题材、核心玩法、美术表现、用户体验、音乐效果、市场预期、商业
此功能旨在降低H5游戏接入手Q轻游戏成本,同时提供手Q相关的能力:用户信息、排行榜、分享等 支持版本:安卓手 Q 7.6.0 及以上,iOS 7.9.0 及以上 H5游戏包上架与正常游戏包上架流程一致 H5游戏包说明 H5游戏包与普通游戏包有所不同,游戏专用包地址 gameConfig.json:游戏配置文件,H5需重点关注 main.js:使用Bricks引擎开发的游戏的代码文件,H5游戏不用关
你的常用的数据结构都有什么? HashMap和HashSet的区别? 怎么构造一个HashMap HashMap优势是什么? 还有什么需要注意的? 扩容机制,hash冲突? 如果你去设计一个Hash函数怎么设计呢? 一般 HashMap多线程情况下会出现什么问题? 怎么解决扩容死链的? 尾插会有什么问题? 数据错乱问题以外还有什么其他问题? 怎么解决这个问题? councurrentHashMap
long time no see. 熟悉的滋味🤩😍,先来个凉经。 一面 5.17 40 min 编程题:memcpy, 反转字符串数组,两个栈实现队列。 C++ 如何调整内存对齐值 主机大小端序 智能指针 C++ Coroutine TCP 包头字段... 标志位 -> 建立连接过程,终止连接过程 -> TIME_WAIT, CLOSE_WAIT 分析,属于哪一方? 进程间通信方式... pi