
Mojoc
文章平均质量分 72
scott.cgi
要么编程,要么被编程,编程是一种超能力
展开
-
「游戏引擎Mojoc」(8)C实现泛型ArrayList
泛型ArrayList是基础的数据结构,然而在C的标准库里并没有提供,所以需要自己手动实现一个。Mojoc的ArrayList实现经过了实践的测试,达到了稳定和高效的状态,源码ArrayList.h。本文主要介绍实现思路和一些特性,Mojoc的泛型ArrayList主要完成了以下几个功能:存取放任意数据类型。动态内存扩展。针对栈数据与堆数据不同的存储策略。一组简洁的数据操作接口。利用宏进行原创 2017-12-03 16:58:00 · 537 阅读 · 0 评论 -
「游戏引擎Mojoc」(9)C使用二分查找实现泛型字典映射
字典映射是最基础,最重要的数据结构,通常会利用哈希表来实现。Mojoc提供了另外一种形式的实现,通过数组和二分查找策略,来完成字典数据的映射。源代码在这里:ArrayStrMap.h。原理字典映射的核心在于,如何把一个字符串,通过某个策略映射到一个唯一的标识上。利用hash算法生成hash code,然后映射到数组index上就是一种方法。Mojoc ArrayStrMap的思路很简单原创 2018-01-05 17:59:23 · 612 阅读 · 0 评论 -
「游戏引擎Mojoc」(1)简介
Mojoc 是一个开源(MIT License),跨平台,使用C语言编写的游戏引擎。基于OpenGLES3的渲染和C99的语法写成。目前,可以跨平台工作在Android和IOS上,也很容易扩展到其它平台。GitHub地址:scottcgi/Mojoc核心理念保持简单,追求简单,简单充满了力量。而简单的背后,是更多的思考,实践与重构。主要特性所有的代码实现,只是用了C语言和...原创 2017-10-23 10:20:37 · 2286 阅读 · 0 评论 -
「游戏引擎Mojoc」(2)C代码风格
代码风格的问题,很微妙,也很有趣。因为它并不影响代码的运行和功能,但它连接着人的心灵和信仰。代码风格目的简单明确,就是增加代码的可阅读性,降低维护成本,减少心智负担。纠结的地方在于,每个人对“可阅读性”的理解和喜好不同。专注容易产生喜爱,喜爱容易滋生癖好,代码写的越多,越会形成个人风格习惯。而逻辑性,还容易在大脑中创造强迫症的倾向,所以代码风格会演变成信仰,难以动摇。因为代码风格不喜欢,很可能就会否原创 2017-10-23 10:27:04 · 869 阅读 · 0 评论 -
「游戏引擎Mojoc」(3)C面向对象编程
用C语言进行面向对象编程,有一本非常古老的书,Object-Oriented Programming With ANSI-C。1994出版的,很多OOC的思想可能都是源于这本书。但我觉得,没人会把书里的模型用到实际项目里,因为过于复杂了。没有必要搞出一套OOP的语法,把C模拟的和C++一样,那还不如直接使用C++。Mojoc使用了一套极度轻量级的OOC编程模型,在实践中很好的完成了OOP的抽象。有以原创 2017-10-23 10:29:39 · 1031 阅读 · 0 评论 -
「游戏引擎Mojoc」(4)面向组件-状态机-消息驱动3合1编程模型
实践中,发现面向组件-状态机-消息驱动,如果整合起来,能够更加自然和简单的进行抽象。这些都是以面向对象为基础,更进一步的抽象扩展。最初的灵感是在看这本书的时候产生的,Practical UML Statecharts in C/C++, Second Edition。本文会分别简单介绍一下,面向组件,状态机,消息驱动的各自特点。然后,结合Mojoc的代码,看看是如何把三者整合起来的使用的。面向组件显原创 2017-10-23 10:31:19 · 796 阅读 · 0 评论 -
「游戏引擎Mojoc」(5)快速指南
按照以下步骤,可以快速直观的了解Mojoc引擎结构和功能。第一步获取源代码,有三个选项。Git 地址 https://github.com/scottcgi/Mojoc.git下载源代码压缩包https://github.com/scottcgi/Mojoc/archive/master.zip下载已发布的版本 https://github.com/scottcgi/Mojoc/release原创 2017-10-23 10:33:52 · 1041 阅读 · 0 评论 -
「游戏引擎Mojoc」(6)NDK替换android_native_app_glue的实现
Android NDK开发native app官方提供了一个胶水层,android_native_app_glue,NDK的demo里给出了示例,如何使用胶水层开发native activity。但我发现这个胶水层不好,过于复杂,过度封装,代码质量不高。于是经过研究,直接使用ANativeActivity的接口,重写一个自己的胶水层。Mojoc里重写的层是NativeGlue.c,经过测试完全没有问原创 2017-10-23 10:34:52 · 1025 阅读 · 1 评论 -
「游戏引擎Mojoc」(7)C使用goto label地址实现协程
C 语言实现协程,最困难的部分就是上下文信息的保存和还原。这样才能够做到,让协程在任意位置让出执行权限,稍后再恢复到中断位置继续执行。C 实现协程一般有几个方案。使用第三方库来保存恢复上下文数据,比如ucontext。使用汇编来保存上下文信息。使用setjmp / longjmp 保存恢复上下文信息。使用switch case的特性来做上下文断点继续,上下文信息需要用static变量保存。比原创 2017-10-23 10:35:31 · 851 阅读 · 0 评论 -
「游戏引擎Mojoc」(10)Android NDK通用JNI调用Java代码封装
Mojoc提供了一个通用的工具类,来调用Android Java代码,以实现特定平台的功能。这个工具类封装了JNI使用的繁琐细和上下文对象的获取,提供了简单直接的API专注于Java类和方法的访问,并且实现了任意类型Java方法的调用。本文将会介绍以下几点:NDK NativeActivity的JNI上下文对象获取。JNI中JNIEnv指针的使用和理解。根据路径获取Java类对象。...原创 2018-05-20 20:19:56 · 528 阅读 · 0 评论