| tags: [ GameEngine Graphics ] categories: [ Development ]
游戏引擎相关
部分游戏引擎和图形库
简单引擎:
- GDevelop (不开源:Construct 3, GameMaker Studio, RPG Maker)
- JS/TS: Cocos Creator, Cocos2d-x
- Lua: Defold⭐️, Love2D⭐️ / Lovr, Solar2D, Gideros
- Java: libGDX, JMonkeyEngine, LWJGL, JOGL
高级引擎:
简单图形库:
High level
Low Level
JavaScript
教学性质
高级图形库:
参考:
- https://en.wikipedia.org/wiki/List_of_game_engines
- https://2024.stateofjs.com/en-US/other-tools/#graphics_animation
- https://en.wikipedia.org/wiki/Physics_engine
- https://ossinsight.io/collections/game-engine/
- https://itch.io/game-development/engines
Gideros, Solar2D, Defold, Love2D 在图形方面的 API 差异
在图形 API 方面,Gideros、Solar2D(原 Corona SDK)、Defold 和 LÖVE(Love2D)各有不同的设计理念和抽象层级。它们都面向 2D 游戏开发,但在底层封装、坐标系统、渲染控制、纹理管理、着色器支持等方面存在显著差异。以下是它们在图形 API 方面的主要对比:
🎨 1. 坐标系统与屏幕适配
引擎 | 默认坐标系 | 屏幕适配机制 | 备注 |
---|---|---|---|
Gideros | 左上角 (0,0),Y 向下 | 支持多种适配模式(如 letterbox, zoom) | 类似 Flash,使用 Sprite 层级树 |
Solar2D | 左上角 (0,0),Y 向下 | 自动缩放 + content scaling(基于 config.lua) | 简单但灵活,适配移动端友好 |
Defold | 左下角 (0,0),Y 向上 | 基于“设计分辨率” + 动态缩放/裁剪 | 使用正交相机,支持多分辨率配置 |
LÖVE | 左上角 (0,0),Y 向下 | 手动控制(需自行实现缩放/投影) | 更底层,完全自由控制 |
💡 Defold 使用 OpenGL 标准坐标(左下原点),其余三者更贴近屏幕像素坐标(左上原点)。
🖼️ 2. 图形对象与层级管理
引擎 | 图形对象模型 | 层级结构 | 变换控制 |
---|---|---|---|
Gideros | 基于 DisplayObject(Sprite, Bitmap, TextField 等) | 树状结构,addChild/removeChild | 支持锚点、缩放、旋转、透明度等 |
Solar2D | DisplayObject(如 display.newImageRect) | 父子关系 + 层级组(Groups) | 锚点、旋转、缩放、alpha,支持 transition 动画 |
Defold | Game Object + Component(Sprite, Tilemap 等) | 基于 collection/go 结构 | 通过属性或消息控制,支持骨骼动画 |
LÖVE | 无内置对象模型,需手动管理 | 完全手动(数组/自定义树) | 使用 love.graphics.draw + 变换矩阵 |
💡 Gideros 和 Solar2D 提供了类似 Flash 的显示列表;Defold 更接近 Unity 的组件系统;LÖVE 最底层,无内置对象系统。
🎮 3. 渲染与绘制 API
引擎 | 绘制方式 | 是否自动批处理 | 自定义绘制(形状/线条) | 着色器支持 |
---|---|---|---|---|
Gideros | 基于 Sprite 树自动渲染 | ✅ 是 | 支持(Shape, Path2D) | ✅ GLSL(需平台支持) |
Solar2D | 自动渲染 DisplayObjects | ✅ 是 | 支持(display.newLine, vector) | ✅ GLSL(片段着色器) |
Defold | 基于组件 + 渲染管线 | ✅ 是 | 通过 rendercam + custom material | ✅ GLSL(完整管线控制) |
LÖVE | 手动调用 love.graphics.draw* | ❌ 否(需手动批) | ✅ 强大(矩形、圆形、多边形、线条) | ✅ GLSL(Shader 对象) |
💡 LÖVE 提供最灵活的绘图 API,适合需要自定义渲染的游戏(如粒子系统、UI 框架);Defold 和 Solar2D 更适合“声明式”对象渲染。
🖌️ 4. 纹理与精灵管理
引擎 | 精灵创建方式 | 纹理图集支持 | 动画支持 |
---|---|---|---|
Gideros | Bitmap + TextureRegion | ✅(TexturePacker 导入) | SpriteAnimation + MovieClip |
Solar2D | display.newImage / newSpriteSheet | ✅(SpriteSheet) | ✅(sprite.newSprite) |
Defold | Sprite Component + Atlas | ✅(内置图集工具) | ✅(Flipbook + Spine) |
LÖVE | love.graphics.newImage / Quad | ✅(需手动管理 Quad) | ❌(需手动帧控制) |
💡 Defold 的图集工具集成最好;LÖVE 需要开发者自己管理纹理坐标;Solar2D 的 SpriteSheet 最易上手。
🧩 5. 着色器与后期处理
引擎 | 着色器支持 | 后期处理(Post-process) | 自定义渲染管线 |
---|---|---|---|
Gideros | ✅(Shader 类,GLSL) | ❌(需手动 RenderTarget) | 有限(RenderTarget) |
Solar2D | ✅(effect 对象,片段着色器) | ✅(capture 屏幕 + shader) | 有限 |
Defold | ✅(Material + Vertex/Fragment) | ✅(RenderCam + RenderScript) | ✅(完整可编程管线) |
LÖVE | ✅(Shader + Canvas) | ✅(Canvas + Shader 组合) | ✅(完全控制) |
💡 LÖVE 和 Defold 在着色器和后期处理方面最强大;Solar2D 和 Gideros 更适合轻量级特效。
📊 6. 性能与批处理
引擎 | 自动合批(Draw Call 优化) | 自定义合批支持 | 渲染性能调优工具 |
---|---|---|---|
Gideros | ✅(同材质/纹理自动合批) | ❌ | 基础调试(stats) |
Solar2D | ✅(自动优化纹理批次) | ❌ | Profiler 工具 |
Defold | ✅(引擎自动管理) | ✅(材质控制) | 内置 profiler + render stats |
LÖVE | ❌(需手动用 SpriteBatch) | ✅(SpriteBatch) | 无内置,需手动计时 |
💡 LÖVE 的 SpriteBatch 是高性能 2D 渲染的关键;Defold/Gideros/Solar2D 更“开箱即用”。
🧭 7. 相机与视口控制
引擎 | 内置相机系统 | 多相机支持 | 视口裁剪/缩放控制 |
---|---|---|---|
Gideros | ❌(需手动矩阵变换) | ❌ | ✅(通过 Sprite 缩放/裁剪) |
Solar2D | ❌(需手动 scale/offset) | ❌ | ✅(display.* 调整) |
Defold | ✅(Camera Component) | ✅ | ✅(正交/透视,viewport) |
LÖVE | ❌(需手动 love.graphics.translate/scale) | ✅(多 Canvas) | ✅(完全手动) |
💡 Defold 提供最完整的相机系统;LÖVE 最灵活但需手动实现。
🧪 8. 示例:绘制一个旋转的精灵
Gideros
local bitmap = Bitmap.new(Texture.new("image.png"))
bitmap:setAnchorPoint(0.5, 0.5)
bitmap:setRotation(45)
stage:addChild(bitmap)
Solar2D
local img = display.newImageRect("image.png", 100, 100)
img.x, img.y = display.contentCenterX, display.contentCenterY
img.rotation = 45
Defold
go.set(".", "rotation.z", 45 * math.pi / 180)
LÖVE
function love.draw()
love.graphics.draw(img, x, y, math.rad(45), 1, 1, img:getWidth()/2, img:getHeight()/2)
end
✅ 总结对比表(图形 API 核心差异)
特性 | Gideros | Solar2D | Defold | LÖVE |
---|---|---|---|---|
抽象层级 | 中高(Flash风格) | 高(声明式) | 中高(组件化) | 低(过程式) |
坐标系 | 左上,Y向下 | 左上,Y向下 | 左下,Y向上 | 左上,Y向下 |
对象系统 | DisplayObject树 | DisplayObject组 | Game Object+组件 | 无(需自建) |
自动批处理 | ✅ | ✅ | ✅ | ❌(需SpriteBatch) |
自定义绘图 | 有限(Shape) | 有限(vector API) | 有限(需材质) | ✅ 强大 |
着色器支持 | ✅(GLSL) | ✅(effect) | ✅(完整管线) | ✅(Shader对象) |
相机系统 | ❌ | ❌ | ✅ | ❌(手动矩阵) |
适合项目类型 | 休闲/广告游戏 | 移动端2D游戏 | 中大型2D/3D混合 | 原型/独立/技术实验 |
🎯 选型建议
- 追求快速开发 & 移动端适配 → Solar2D
- 喜欢 Flash/AS3 风格 & 跨平台发布 → Gideros
- 需要组件化架构 & 团队协作 & 3D混合 → Defold
- 追求极致控制 & 学习图形原理 & 独立实验 → LÖVE