▶_MiniApp Toolkit

minigame-canvas-engine

工具

微信官方轻量级 Canvas 2D 渲染引擎,用 Web 开发方式构建小游戏开放数据域 UI(好友排行榜、成就展示等),支持 Flex 布局、事件系统和组件化开发

canvas渲染引擎微信小游戏开放数据域UI官方

详细文档

minigame-canvas-engine — 微信官方轻量级 Canvas 渲染引擎#

资源概述#

minigame-canvas-engine(简称 Layout)是微信官方团队开源的轻量级 Canvas 2D 渲染引擎,专为微信小游戏开放数据域 UI 开发场景设计。它的核心目标是用 Web 的开发方式来开发简单的 Canvas 应用

在开发 Canvas 应用时(如好友排行榜、成就展示),传统方式需要手动创建 Sprite、设置位置和样式,代码充斥重复逻辑。游戏引擎(Cocos Creator / Layabox)虽提供 IDE 拖拽生成界面,但过于庞大——如果只想开发一个好友排行榜,使用游戏引擎杀鸡用牛刀。minigame-canvas-engine 正是为这类轻量级场景而生:既能用配置文件表达界面,又保持极小的体积。

GitHub Stars: 308 · Forks: 66 · 许可证: MIT · npm: minigame-canvas-engine v1.0.29(30 versions)

核心能力#

  • 类 Web 开发模型:支持 Flex 布局、CSS-like 样式系统、文本/图片/容器等基础元素
  • JSON 配置驱动:界面通过 JSON 配置文件描述,无需手动创建精灵
  • 事件系统:支持 click / touch 等交互事件绑定
  • 模板引擎:支持 template 语法,实现列表渲染和条件渲染
  • 自动 DPR 适配:根据设备像素比自动调整渲染清晰度
  • Web 端调试:提供 CodePen 在线模板,无需在小游戏环境中即可调试

设计规范#

minigame-canvas-engine 使用类 CSS 的样式系统,开发者可以沿用 Web 开发习惯:

  • 布局:支持 Flex 布局(flexDirection / justifyContent / alignItems)
  • 盒模型:width / height / margin / padding / borderRadius
  • 文本:fontSize / color / textAlign / lineHeight / fontWeight
  • 图片:支持 src 属性加载远程图片
  • 定位:position relative/absolute

引擎在 Canvas 上模拟了 DOM 的层级结构和事件冒泡机制,使 Web 开发者可以无缝迁移。

审核规范#

作为开放数据域 UI 渲染工具,不涉及小程序审核流程。开发数据域的界面展示需要遵守微信开放数据域的限制规则(不能直接访问开放数据域好友关系链之外的数据)。

开发指南#

快速上手#

code
// 在开放数据域 main.js 中
const Layout = require('minigame-canvas-engine');

// 初始化引擎
Layout.init({
  designWidth: 750,    // 设计稿宽度
  deviceWidth: wx.getSystemInfoSync().screenWidth,
  // 注册图片加载器
  imageLoader: (src, callback) => {
    wx.createImage().onload = function() {
      callback(this);
    };
  }
});

// 创建界面
const element = Layout.createElement('view');
element.style = {
  width: '100%',
  height: '100rpx',
  backgroundColor: '#ffffff',
  flexDirection: 'row',
  alignItems: 'center',
  justifyContent: 'center'
};

const text = Layout.createElement('text');
text.text = '好友排行榜';
text.style = { fontSize: '32rpx', color: '#333333' };

element.appendChild(text);
Layout.documentElement.appendChild(element);

// 事件绑定
element.addEventListener('click', () => {
  console.log('点击了排行榜项');
});

模板方式渲染列表#

code
// 使用 template 语法批量渲染好友列表
const template = {
  type: 'view',
  style: { flexDirection: 'column' },
  children: [
    {
      type: 'view',
      style: { height: '120rpx', flexDirection: 'row', alignItems: 'center' },
      dataKey: 'rankList',
      children: [
        { type: 'text', dataKey: 'nickname', style: { fontSize: '28rpx' } },
        { type: 'text', dataKey: 'score', style: { fontSize: '28rpx', marginLeft: 'auto' } }
      ]
    }
  ]
};

Layout.template(template, { rankList: friendData });

常见陷阱#

  1. 开放数据域限制:minigame-canvas-engine 主要用于开放数据域的好友排行榜等场景,开放数据域中无法使用 wx.request 等网络 API
  2. Canvas 2D vs WebGL:引擎基于 Canvas 2D 上下文,性能适合中等复杂度 UI(几十到上百个元素),不适合高频动画场景
  3. 图片加载:开放数据域中图片加载需使用 wx.createImage(),不能用 DOM 的 new Image()
  4. 调试环境差异:CodePen 调试环境与实际小游戏环境存在差异(如图片加载方式),最终需在真机验证
  5. 版本兼容:需要微信基础库 2.x+ 支持 Canvas 2D 接口

生态资源#

官方资源#

相关工具#

  • threejs-miniprogram:微信官方 Three.js 小程序适配(3D 渲染场景)
  • minigame-tuanjie-transform-sdk:微信官方 Unity/团结引擎小游戏适配
  • awesome-skyline:微信官方 Skyline 渲染引擎示例集

版本更新#

  • npm v1.0.29(30 versions):持续更新中
  • 最近 push:2026-08-05(活跃维护)
  • 微信官方团队维护,与小游戏平台同步迭代