You've already forked Pandona-Engine
6.4 KiB
6.4 KiB
Pandona Engine (PE) - IFLOW 上下文
项目概述
Pandona Engine (PE) 是一个功能完整的 JavaScript 2D 游戏引擎,基于 DOM 实现,用于创建各种类型的 2D 游戏和动画。现在支持现代编译时架构,使用 Vite 作为构建工具。
核心特性
- 完整的游戏开发功能:支持创建各种类型的2D游戏
- 模块化架构:核心功能拆分为独立模块,易于扩展和维护
- 插件系统:支持自定义插件扩展引擎功能
- 多种元素类型:支持精灵、容器、文本、HTML 和 SVG 元素
- 高级动画系统:内置补间动画、帧动画、动画序列和时间轴
- 音频管理:支持音效和背景音乐播放
- 场景管理:支持多场景切换和过渡效果
- 事件系统:增强的事件总线,支持全局和局部事件
- 内存管理:完善的资源清理机制
- 碰撞检测:矩形碰撞检测系统
- 输入处理:键盘和鼠标输入处理
- UI系统:按钮、标签、图像、滑块等UI组件
- 摄像机系统:支持跟随、缩放、旋转和震动效果
- 粒子系统:创建各种视觉效果
- 组件系统:基于组件的游戏对象系统
- 游戏循环:固定时间步长的游戏循环
- 编译时架构:使用 Vite 构建工具,支持热重载和代码优化
项目结构
cssEngine/
├── index.html # 主页面
├── main.js # 应用入口文件
├── vite.config.js # Vite配置文件
├── package.json # 项目配置
├── README.md # 项目说明文档
├── IFLOW.md # IFLOW上下文文件
├── public/ # 静态资源
│ └── sprite.css # 精灵样式文件
├── style/ # 全局样式
│ └── base.less # 基础样式
├── examples/ # 示例项目
│ ├── spaceShooter.js # 太空射击游戏示例
│ └── spaceShooter.html # 示例游戏HTML文件
├── src/
│ ├── core/ # 核心模块
│ │ └── Engine.js # 引擎主类
│ ├── elements/ # 元素类
│ │ ├── BaseElement.js
│ │ ├── Sprite.js
│ │ ├── Box.js
│ │ ├── TextElement.js
│ │ ├── HtmlElement.js
│ │ ├── SvgElement.js
│ │ ├── GameObject.js
│ │ └── Component.js
│ ├── managers/ # 管理器
│ │ ├── ResourceManager.js
│ │ ├── SceneManager.js
│ │ ├── AudioManager.js
│ │ ├── TransitionManager.js
│ │ └── Camera.js
│ ├── animation/ # 动画系统
│ │ ├── Tween.js
│ │ ├── AnimationSystem.js
│ │ └── AnimationController.js
│ ├── effects/ # 特效系统
│ │ └── ParticleSystem.js
│ ├── ui/ # UI系统
│ │ └── UI.js
│ ├── utils/ # 工具类
│ │ └── EventBus.js # 事件总线
│ └── scenes/ # 场景目录
│ └── index/ # 主场景
│ ├── index.js # 场景结构和逻辑
│ └── index.less # 场景样式
└── test/ # 测试文件
└── ... # 各模块测试
核心类和API
Engine 引擎主类
constructor(element, options)- 创建引擎实例use(plugin, options)- 安装插件load(src)- 加载资源loadSound(name, src, options)- 加载音效loadMusic(name, src, options)- 加载音乐playSound(name, options)- 播放音效playMusic(name, options)- 播放音乐createScene(name)- 创建场景switchScene(name)- 切换场景tween(target, duration, easing)- 创建补间动画createFrameAnimation(name, frames, frameRate)- 创建帧动画playFrameAnimation(sprite, animationName, loop)- 播放帧动画addGameObject(obj)- 添加游戏对象removeGameObject(obj)- 移除游戏对象checkCollision(obj1, obj2)- 碰撞检测setCameraPosition(x, y)- 设置摄像机位置follow(target, offset)- 跟随目标setCameraZoom(zoom)- 设置摄像机缩放shakeCamera(intensity, duration)- 屏幕震动addUIElement(element)- 添加UI元素removeUIElement(element)- 移除UI元素
GameObject 游戏对象基类
setPosition(x, y)- 设置位置setSize(width, height)- 设置尺寸setRotation(rotation)- 设置旋转角度setScale(scaleX, scaleY)- 设置缩放setVisible(visible)- 显示/隐藏addChild(child)- 添加子对象removeChild(child)- 移除子对象addComponent(name, component)- 添加组件getComponent(name)- 获取组件removeComponent(name)- 移除组件
Component 组件基类
onAdd(gameObject)- 当组件被添加到游戏对象时调用onRemove(gameObject)- 当组件从游戏对象中移除时调用update(deltaTime)- 更新方法onDestroy(gameObject)- 销毁方法
预定义组件
PhysicsComponent- 物理组件ColliderComponent- 碰撞组件AnimationComponent- 动画组件InputComponent- 输入组件LifecycleComponent- 生命周期组件
UI组件
UIButton- 按钮UILabel- 标签UIImage- 图像UISlider- 滑块
编译时架构
构建工具
- 使用 Vite 作为构建工具
- 支持 ES6 模块系统
- 支持 Less CSS 预处理器
- 支持代码压缩和优化
- 支持开发服务器热重载
开发命令
# 启动开发服务器(热重载)
npm run dev
# 构建生产版本
npm run build
# 预览构建结果
npm run preview
场景化开发
- 使用
src/scenes/目录组织不同场景 - 每个场景包含
index.js(场景逻辑)和index.less(场景样式) - 支持类似HTML的标签语法定义场景结构
开发约定
- 使用ES6模块系统
- 遵循面向对象编程原则
- 使用JSDoc注释重要函数和类
- 保持代码简洁和可读性
- 遵循现有的代码风格和命名约定
- 使用 Less 作为 CSS 预处理器
- 遵循场景化组织结构
示例项目
项目包含一个完整的太空射击游戏示例,展示了引擎的各种功能,位于 examples/spaceShooter.js 和 examples/spaceShooter.html。