本页目录

TNWX 微信系开发脚手架(TypeScript + Node.js)

TNWX · Javen205/TNWX

TNWX 是一个基于 TypeScript 与 Node.js 的微信系开发脚手架,覆盖微信公众号、微信支付、微信小游戏、微信小程序以及企业微信/企业号等场景。其特点是可以较快速地集成到任意 Node.js 框架中,如 Express、Nest、Egg、Koa 等。仓库标签...

其他 自研引擎 Java 游戏状态管理 动画系统 渲染技术 高级
★ Stars 599 Forks 285 License Apache-2.0 更新 2026-09-07

国内开发环境适配

Windows
未知
Linux
未知
macOS
未知
引擎 / 框架:自研引擎 暂无中文教程标记 未标记站长实测
README 未提供构建脚本与依赖清单;原始 Google Code 链接已停止服务,Demo 与依赖获取需自行核验。

中文项目介绍

本仓库是 cocos2d 面向 Android 平台的 Java 移植版本,代码基线来自 cocos2d-android-0.82,并在此基础上从 cocos2d-iphone 0.99.4 继续移植。README 的叙述重心并不在玩法或 API 教程,而在一个非常具体的问题上:如何在 Java/Android 环境下减少垃圾回收(GC)带来的卡顿。作者围绕这一点整理了一整套编码约定与工具类,并记录了移植过程中对调度器、纹理生命周期、线程模型等部分的改造思路。

需要说明的是,README 并未给出 Stars、构建脚本、依赖清单或功能完整度声明,仓库中提到的若干 Demo 是否仍可直接运行也需自行核验。下文内容均以 README 中明确写出的信息为依据。

核心功能

对象创建约束

尽量不要在构造函数之外创建对象,至少应努力遵守这一原则。

复用而非新建

需要更新状态时调用对象的 `set` 方法,而不是每次都 new 一个新对象。

无垃圾工具类

`CG/cc<Typename>Utils` 系列工具类被设计为不产生垃圾。

对象池

`org.cocos2d.types.util.PoolHolder` 持有若干对象池,用于复用 `CGPoint` 这类小对象;该类面向栈式使用,要求 `get()` 的调用次数不低于 `free()` 的次数。多线程场景另有 `ConcOneClassPool`。

无垃圾集合

`org.cocos2d.utils.collections` 包内的类主要供内部使用,不产生垃圾,用于频繁变更的数据结构。

字符串构建

引入 Javolution 的 `TextBuilder` 作为 `StringBuilder` 的替代,同样不产生垃圾;README 举例说明 `CCDirector` 的 `showFPS()` 已不再是垃圾产生源。

Plist 解析

`org.cocos2d.utils` 包内提供 `PlistParser`,可将 plist 读入 `HashMap`。

技术架构分析

技术要点

调度器与回调接口

CCScheduler 现在可以使用 UpdateCallback 接口替代「按方法名调度调用」的方式。README 认为这是更符合 Java 习惯的方案,并且不会为 GC 制造垃圾。

线程模型

README 给出了几条与 Android 线程相关的经验:

  • Android 的 Activity 至少有两个线程,UI 线程应只负责响应用户交互,其余工作放到渲染线程执行。
  • 当时并不存在多核 CPU,因此线程数量应保持最少;耗时的用户事件应从 UI 线程延后,转交渲染线程处理。
  • 按键事件的分发现已交由渲染线程处理。

纹理与资源重建

Activity 暂停时所有 OpenGL 资源都会被销毁,需要重新创建。纹理来源各不相同,因此 CCTexture2D 中定义了一个接口,其中包含 load() 方法,实现该接口的类不得持有正在使用它的 CCTexture2D 引用。README 说明通常无需关心这一机制,例外是使用自己的 Bitmap 初始化纹理时,load() 的实现需由使用者自行完成(可参考 ActionsTest.java 中 ActionDemo 构造函数)。此外,通过 CCSprite.sprite(Bitmap image, String key) 从位图初始化精灵时,位图会被复制并保存在内存中以便重建,应尽量避免这种 CCTexture2D 初始化方式;调用 initWith... 是自由的,但重建逻辑需自行负责。

固定逻辑分辨率

移植自 iPhone 的 Sky Tower 场景使用固定的 320x480 尺寸,因此 CCDirector 的代码被修改为可以请求指定尺寸的 screenSize_。README 认为这符合 CCDirector 的逻辑预期,但会使 2D 投影变为默认投影。示例做法是:先调用 CCDirector.sharedDirector().setScreenSize(320, 480),再通过 createLayoutParams() 依据 DisplayMetrics 计算等比缩放后的宽高,并以 Gravity.CENTER 居中显示。

暂停与恢复

CCDirector 的 pause/resume 并不意味着渲染线程必须停止;但 Activity 暂停时确实需要停止渲染线程,因此 Activity 的 onPause/onResume 与 CCDirector 的 pause/resume 应当是相互独立的方法。

构建与运行

README 未提供 Gradle 配置、依赖版本或构建命令,仅给出以下线索:

  • 项目基于 cocos2d-android-0.82,并从 cocos2d-iphone 0.99.4 移植。
  • 原始 Google Code 地址为 http://code.google.com/p/cocos2d-android-1/,README 称该处有若干 Demo 可供查看。
  • 代码为 Java 实现,面向 Android 平台,涉及 OpenGL 资源与 Bitmap 纹理。

由于 Google Code 服务已停止,上述外链能否访问、Demo 是否仍可运行,均需自行核验。

补充说明

学习建议

这个仓库更适合作为「Java 移动端 2D 引擎在 GC 压力下的工程实践」来阅读,而不是当作入门教程:

  • 先读 PoolHolder 与 ConcOneClassPool,理解栈式对象池的 get/free 配对约束。
  • 再看 CCScheduler 的 UpdateCallback 改造,对比传统按方法名调度的差异。
  • 最后关注 CCTexture2D 的 load() 接口与 Activity 生命周期,理解 OpenGL 资源销毁后重建的责任划分。

阅读时建议以 README 列出的约定为检查清单,逐条在源码中定位对应实现,避免把文档中的设计意图误当作已验证的功能。

开源许可证与版权说明

许可证标识:Apache-2.0。源码、资源与依赖许可可能不同,请以官方仓库为准。本站仅做索引,不托管源码。

相似项目