news 2026/9/26 10:07:37

Pyxel Editor 完全指南:内置资源编辑器四大模块的操作与实现原理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Pyxel Editor 完全指南:内置资源编辑器四大模块的操作与实现原理
  • 游戏开发

【免费下载链接】pyxel

A retro game engine for Python

项目地址:https://gitcode.com/GitHub_Trending/py/pyxel
点击查看免费下载

Pyxel Editor 是 Pyxel(A retro game engine for Python)内置的资源编辑工具,覆盖精灵图、瓦片地图、音效与 BGM 的完整制作流程。本文以 docs/editor-manual.md 官方手册为主体,结合仓库内 CLI 入口、编辑器实现与 Rust 核心常量,系统讲解pyxel edit的启动方式、四个编辑器的全部规格与快捷键,并补充源码级的运行原理,帮助你直接上手制作可被pyxel.load()加载的.pyxres资源文件。

概览:一个工具,四种编辑器

Pyxel Editor 是一个内置的图形化资源编辑工具,由四个独立编辑器组成,可通过屏幕顶部的编辑器切换按钮随时切换:

  • 图像编辑器(Image Editor):编辑用于精灵与瓦片贴图的图像库(image bank)
  • 瓦片地图编辑器(Tilemap Editor):将图像库中的图像作为瓦片排列,拼出地图
  • 声音编辑器(Sound Editor):编辑用于音效与旋律的声音(sound)
  • 音乐编辑器(Music Editor):按播放顺序排列声音,编曲成 BGM 等音乐(music)

从源码结构看,这四种编辑器分别由 python/pyxel/editor/image_editor.py、python/pyxel/editor/tilemap_editor.py、python/pyxel/editor/sound_editor.py 与 python/pyxel/editor/music_editor.py 实现,并在 python/pyxel/editor/app.py 中以_editors列表统一注册、按索引切换,编辑器窗口尺寸固定为 240×180(见 python/pyxel/editor/settings.py)。

快速上手:启动 Pyxel Editor

在终端中执行以下命令即可启动编辑器:

pyxel edit [PYXEL_RESOURCE_FILE]

行为规则如下:

  • 若指定的 Pyxel 资源文件(.pyxres)已存在,则加载该文件内容;
  • 若不存在,则以指定名称创建新文件;
  • 若省略文件名,则创建默认文件my_resource.pyxres。

命令行入口的实现在 python/pyxel/cli.py:未提供文件名时自动补全为my_resource,并通过_complete_extension自动追加.pyxres扩展名,最终调用pyxel.editor.App(resource_file, starting_editor)启动编辑器;编辑器默认以图像编辑器(starting_editor="image")打开。随后 python/pyxel/editor/app.py 会初始化 240×180 的 Pyxel 窗口、开启鼠标支持,并在资源文件存在时调用pyxel.load(),否则调用pyxel.load_pal()建立默认调色板。

通用操作

以下操作在所有编辑器中通用。

菜单栏

屏幕顶部的菜单栏包含四个编辑器切换按钮、撤销/重做按钮与保存按钮。右侧的帮助消息区域会根据光标位置显示上下文相关的操作提示(例如悬停撤销按钮时提示UNDO:CTRL+Z,对应实现见 python/pyxel/editor/app.py)。

按钮功能快捷键
图像编辑器切换到图像编辑器—
瓦片地图编辑器切换到瓦片地图编辑器—
声音编辑器切换到声音编辑器—
音乐编辑器切换到音乐编辑器—
撤销撤销上一步操作Ctrl(Cmd)+Z
重做重做被撤销的操作Ctrl(Cmd)+Y
保存保存资源文件Ctrl(Cmd)+S

其他快捷键

快捷键作用
Alt(Option)+Left/Right切换编辑器类型
Shift+Ctrl(Cmd)+C复制整个编辑目标
Shift+Ctrl(Cmd)+X剪切整个编辑目标(复制并清空)
Shift+Ctrl(Cmd)+V粘贴复制的目标
Shift+点击([+]/[-] 按钮)数值按 ±10 的增量变化

在程序中使用编辑器产物

创建好的资源文件在 Pyxel 应用中通过pyxel.load()加载使用:

import pyxel pyxel.init(256, 256) pyxel.load("my_resource.pyxres") # 加载编辑器保存的资源 pyxel.run(...)

pyxel.load()的完整签名见 python/pyxel/init.pyi,可通过exclude_images、exclude_tilemaps、exclude_sounds、exclude_musics四个开关按需排除部分资源;若同目录存在同名.pyxpal调色板文件,也会一并更新显示颜色。保存则使用pyxel.save()(python/pyxel/init.pyi),两者在 Rust 侧的底层实现位于 crates/pyxel-binding/src/resource_wrapper.rs。

切换资源文件

编辑器运行期间,可拖拽另一个.pyxres文件到窗口以加载其内容。注意:该操作会覆盖当前所有编辑内容,若有未保存的修改请提前保存。

图像编辑器(Image Editor)

图像编辑器用于编辑每个图像库中的图像,是制作像素精灵与瓦片贴图的核心模块。

规格

  • 图像库(Image Banks):0–2,共 3 个
  • 尺寸:每个 256×256 像素
  • 坐标系:原点 (0,0) 位于左上角,X 轴向右、Y 轴向下

上述数值与 Rust 核心常量一一对应:NUM_IMAGES=3、IMAGE_SIZE=256(见 crates/pyxel-core/src/settings.rs),这意味着一个图像库恰好可容纳 32×32 个 8×8 瓦片,是设计瓦片素材时的重要参照。

界面布局

图像画布(Image Canvas)

显示图像库视图中选中区域的放大视图,鼠标点击并拖拽即可绘制像素。

操作作用
右键点击取色(拾取光标位置的像素颜色)
右键拖拽平移视图
图像库视图(Image Bank View)

整个图像库的缩略图,白色边框标示当前编辑区域。

操作作用
方向键移动编辑区域(白色边框)
点击将编辑区域移动到点击位置
右键拖拽平移视图
工具按钮

选择绘制工具,各工具的默认快捷键如下:

工具快捷键说明
选区(Select)S选择矩形区域
铅笔(Pencil)P自由绘制;按住 Shift 绘制直线
空心矩形(Rect Outline)R绘制矩形边框;按住 Shift 绘制正方形
实心矩形(Rect Filled)Shift+R绘制实心矩形;按住 Shift 绘制正方形
空心椭圆(Ellipse Outline)C绘制椭圆边框;按住 Shift 绘制圆形
实心椭圆(Ellipse Filled)Shift+C绘制实心椭圆;按住 Shift 绘制圆形
油漆桶(Bucket)B填充同色连通区域
选区工具快捷键

在使用选区工具时,以下快捷键可用:

快捷键作用
Ctrl(Cmd)+A全选整个画布
Ctrl(Cmd)+C复制选区
Ctrl(Cmd)+X剪切选区(复制并清空)
Ctrl(Cmd)+V粘贴复制的区域
H水平翻转选区
V垂直翻转选区
调色板

从 16 色调色板中选择绘制颜色。

快捷键作用
1–8选择颜色 0–7
Shift+1–8选择颜色 8–15

这 16 色的默认色值定义在 crates/pyxel-core/src/settings.rs 的DEFAULT_COLORS中,从索引 0 的黑色(0x000000)到索引 15 的桃色(0xedc7b0),并对应COLOR_NAVY、COLOR_PURPLE等命名常量(crates/pyxel-core/src/settings.rs)。

图像库编号(Bank Number)

切换目标图像库(0–2)。

加载外部图片

将 PNG、JPG 等图片文件拖拽到图像编辑器,即可在编辑区域位置加载该图片。原图颜色会自动转换为 Pyxel 调色板中的颜色,超出图像库边界的部分会被裁剪。

瓦片地图编辑器(Tilemap Editor)

瓦片地图编辑器用于将图像库中的图像作为瓦片图案排列,并编辑瓦片地图。

规格

  • 瓦片地图(Tilemaps):0–7,共 8 个
  • 尺寸:每个 256×256 瓦片
  • 瓦片图像:图像库中的 8×8 像素区域
  • 引用图像库:每个瓦片地图引用一个图像库

对应核心常量:NUM_TILEMAPS=8、TILEMAP_SIZE=256、TILE_SIZE=8(crates/pyxel-core/src/settings.rs)。256×256 的瓦片地图配合 8×8 瓦片,意味着单张地图最多可编排 1024×1024 像素的内容。

界面布局

瓦片地图画布(Tilemap Canvas)

显示瓦片地图视图中选中区域的放大视图,在此放置瓦片图像视图中选中的瓦片。绘制工具与选区快捷键与图像编辑器共用。注意:所有格子默认填充瓦片 (0,0),因此建议保持图像库 (0,0) 位置为空,以免地图初始状态出现意外内容。

操作作用
右键点击拾取光标位置的瓦片
右键拖拽平移视图
瓦片地图视图(Tilemap View)

整个瓦片地图的缩略图,白色边框标示当前编辑区域。

操作作用
方向键移动编辑区域(白色边框)
点击/拖拽将编辑区域移动到点击位置
瓦片图像视图(Tile Image View)

显示被引用的图像库,通过白色边框选择瓦片图像。

操作作用
Shift+方向键移动选区
拖拽矩形框选多个瓦片
右键拖拽平移视图
瓦片地图编号

切换目标瓦片地图(0–7)。

引用图像库编号(Ref. Image Bank Number)

切换用于瓦片图像的图像库(0–2)。

工具按钮

与图像编辑器相同的七种工具(选区 S / 铅笔 P / 空心矩形 R / 实心矩形 Shift+R / 空心椭圆 C / 实心椭圆 Shift+C / 油漆桶 B),用于在瓦片地图上绘制。

放置多个瓦片

在瓦片图像视图中拖拽选中多个瓦片后绘制时,选中的瓦片会作为循环图案被放置。例如纵向选中两个瓦片后用铅笔绘制,两个瓦片会交替循环出现;横向与纵向同时多选时同理。绘制起始位置对应所选区域的左上角。

加载 TMX 文件

将 Tiled Map Editor 创建的TMX 文件拖拽到瓦片地图编辑器,即可在编辑区域位置加载第 0 层(layer 0)的内容。仓库中的示例资源 python/pyxel/examples/assets/urban_rpg.tmx 搭配 python/pyxel/examples/15_tiled_map_file.py 演示了 TMX 的典型用法。

声音编辑器(Sound Editor)

声音编辑器用于编辑旋律与音效(sound),是 Pyxel 复古音频系统的核心入口。

规格

  • 声音(Sounds):0–63,共 64 个
  • 音高范围:C0–B4
  • 最大长度:48 个音符
  • 复音数:单音(一个音符或休止符)
  • 每个音符的设置:音色(Tone)、音量(Volume)、效果(Effect)

数值对应关系:NUM_SOUNDS=64(crates/pyxel-core/src/settings.rs);最大 48 个音符定义于编辑器常量MAX_SOUND_LENGTH=48(python/pyxel/editor/settings.py)。

界面布局

声音编号(Sound Number)

切换目标声音(0–63),实现为NumberPicker,范围取自pyxel.NUM_SOUNDS - 1(python/pyxel/editor/sound_editor.py)。

播放速度(Playback Speed)

设置每个音符的播放时长,对全部音符统一生效,取值范围1–99。数值越小播放越快:1 个速度单位 = 1/120 秒,例如速度 60 表示每音符 0.5 秒。音效通常用 1–9,旋律建议 10 及以上。该换算依据核心常量SOUND_TICKS_PER_SECOND=120(crates/pyxel-core/src/settings.rs),速度值即音符占用的 tick 数。

播放 / 停止 / 循环
按钮快捷键作用
播放Space播放声音
停止Space播放中再次按 Space 停止
循环L切换循环播放
钢琴卷帘(Piano Roll)

点击即可输入音符音高。红色方块代表音符,蓝色方块代表休止符。钢琴卷帘编辑时显示蓝色光标,属性区编辑时显示另一种光标。音符从左到右依次播放,空位自动插入休止符;点击已有位置可覆盖改写;拖拽可连续输入音符并自动线性插值(滑音式过渡)。

操作作用
Up/Down在钢琴卷帘与属性区之间切换
Left/Right移动光标
Delete(fn+delete)删除当前位置的音符
Backspace(delete)删除当前位置之前的音符
Shift+Space从光标位置开始播放
Ctrl(Cmd)+A全选整个范围
Shift+Left/Right开始范围选择
范围选择
快捷键作用
Ctrl(Cmd)+C复制选区
Ctrl(Cmd)+X剪切选区(复制并清空)
Ctrl(Cmd)+V粘贴复制的区域
Ctrl(Cmd)+U将选区音高整体升高 1
Ctrl(Cmd)+D将选区音高整体降低 1
八度栏(Octave Bar)

显示键盘输入的起始八度(0–3),键盘从所选八度起覆盖两个八度。

快捷键作用
PageUp(fn+Up)八度 +1
PageDown(fn+Down)八度 -1

键盘输入

可使用 PC 键盘直接输入音符。上行(QWE 行 + 数字行)与下行(ZXC 行 + ASD 行)各对应一个八度的钢琴键,共覆盖两个八度;白键对应自然音,灰键对应升半音。用八度栏选择起始八度(0–3)。

上行八度(QWE 行 + 数字行)

音符按键
CQ
C#2
DW
D#3
EE
FR
F#5
GT
G#6
AY
A#7
BU

下行八度(ZXC 行 + ASD 行)

音符按键
CZ
C#S
DX
D#D
EC
FV
F#G
GB
G#H
AN
A#J
BM
休止符A
快捷键作用
键盘按键 → Enter将按下的键盘音符输入到钢琴卷帘
1循环切换键盘输入的预览音色(共 4 种)

属性区(TON / VOL / EFX)

为每个音符设置音色(TON)、音量(VOL)与效果(EFX)。在钢琴卷帘编辑时按↓键或点击 TON 行即可进入属性区。光标移动、范围选择、复制粘贴等操作与钢琴卷帘共用。在对应行上按键即可输入该行的值,例如在 TON 行按P即设置 Pulse 音色。要中途改变某个属性,需从目标位置起为所有音符设置该值,VOL 与 EFX 同理。

音色(Tone)

光标位于 TON 行时,按以下键设置音色;未设置时默认 T(Triangle)。

按键名称说明
TTriangle三角波,柔和温和的音色,类似长笛
SSquare方波,电子感清晰音色,类似单簧管或风琴
PPulse脉冲波,明亮华丽的音色,类似小号
NNoise噪声,无音高,适合打击乐与爆炸音效

四种音色对应核心常量TONE_TRIANGLE(0)、TONE_SQUARE(1)、TONE_PULSE(2)、TONE_NOISE(3),其波形采样数据定义于 crates/pyxel-core/src/settings.rs 与DEFAULT_TONE_*系列常量(crates/pyxel-core/src/settings.rs),三角波采用 32 点 wavetable,方波与脉冲波为不同占空比的 wavetable,噪声则使用长周期噪声模式。

音量(Volume)

光标位于 VOL 行时,按数字键0–7设置音量(0 = 静音,7 = 最大);默认值为 7。注意:多个声道同时使用最大音量可能导致整体响度过大。核心侧MAX_VOLUME=7与默认声道增益DEFAULT_CHANNEL_GAIN=0.125见 crates/pyxel-core/src/settings.rs。

效果(Effect)

光标位于 EFX 行时,按以下键设置效果;默认值为 N(None)。

按键名称说明
NNone无效果
SSlide从前一音符平滑滑音到本音符
VVibrato周期性振荡音高(核心实现为 6Hz 周期、±25 音分深度,见VIBRATO_PERIOD_TICKS与VIBRATO_DEPTH_CENTS,crates/pyxel-core/src/settings.rs)
FFadeOut整个音符期间音量渐减;也用于区分同音高的连续音符
HHalf-FadeOut音符后半段音量渐减,比 F 更长的延音
QQuarter-FadeOut音符最后四分之一音量渐减,比 H 更长的延音

六种效果对应核心常量EFFECT_NONE(0)至EFFECT_QUARTER_FADEOUT(5),见 crates/pyxel-core/src/settings.rs。

音乐编辑器(Music Editor)

音乐编辑器用于按播放顺序排列声音,编曲成音乐轨道。

规格

  • 音乐轨道(Music Tracks):0–7,共 8 个
  • 声道(Channels):4
  • 每声道最大声音数:32

对应核心常量NUM_MUSICS=8、NUM_CHANNELS=4(crates/pyxel-core/src/settings.rs),每声道最大 32 个声音槽由编辑器常量MAX_MUSIC_LENGTH=32定义(python/pyxel/editor/settings.py)。

界面布局

音乐编号(Music Number)

切换目标音乐轨道(0–7)。

播放 / 停止 / 循环
按钮快捷键作用
播放Space播放音乐
停止Space播放中再次按 Space 停止
循环L切换循环播放
序列编辑器(CH0–CH3)

在四个声道(CH0–CH3)中按播放顺序放置声音编号,支持跨声道复制粘贴。源码中四个声道由四个MusicField实例并排构成(python/pyxel/editor/music_editor.py),其底层数据为每个音乐轨道内的seqs序列列表。

快捷键作用
Up/Down切换编辑声道
Left/Right移动编辑光标
Delete(fn+delete)删除当前位置的声音
Backspace(delete)删除当前位置之前的声音
Shift+Space从光标位置开始播放
Ctrl(Cmd)+A全选当前声道的整个范围
Shift+方向键在声道内选择范围
Ctrl(Cmd)+C复制选区
Ctrl(Cmd)+X剪切选区(复制并清空)
Ctrl(Cmd)+V粘贴选区(也支持跨声道)
Ctrl(Cmd)+U选区声音编号整体 +1
Ctrl(Cmd)+D选区声音编号整体 -1
声音按钮(0–63)

用于插入声音编号(0–63)的按钮。点击按钮即把该声音编号插入到编辑光标位置。已创建的声音显示为蓝色,未创建的显示为灰色;鼠标悬停在按钮上可预览该声音。

测试与验证

仓库为编辑器提供了自动化测试保障: python/tests/test_editor.py 通过参数化用例逐帧截屏对比(compare_screenshots)验证图像、瓦片地图、声音、音乐各编辑器的渲染结果,参考图存放于 python/tests/references/editor(如editor_image_f1.png、editor_sound_fedit.png等),同时覆盖了按钮初始范围、数值钳制与自定义调色板映射等边界行为。这意味着本文介绍的全部快捷键与绘制行为均有可回归验证的实现支撑。

从编辑到运行:完整工作流

综合全文,一个典型的 Pyxel 资源制作与使用流程为:

  1. 运行pyxel edit my_resource.pyxres打开编辑器(省略文件名则创建my_resource.pyxres);
  2. 在图像编辑器中绘制精灵与瓦片素材(16 色、256×256、3 个图像库);
  3. 在瓦片地图编辑器中编排 8 个瓦片地图(每图 256×256 瓦片、引用一个图像库);
  4. 在声音编辑器中创作最多 64 个声音(48 音符上限、T/S/P/N 四种音色、六种效果);
  5. 在音乐编辑器中用 4 个声道编排最多 8 首音乐(每声道 32 个声音槽);
  6. 按 Ctrl(Cmd)+S 保存,或在运行期间拖入新.pyxres切换资源;
  7. 在应用代码中调用pyxel.load("my_resource.pyxres")加载,通过pyxel.images、pyxel.tilemaps、pyxel.sounds、pyxel.musics系列 API 在游戏中使用。

通过掌握上述规格与快捷键,你可以在不编写任何资源生成代码的情况下,纯可视化地完成 Pyxel 游戏所需的全部美术与音频资产。

  • 游戏开发

【免费下载链接】pyxel

A retro game engine for Python

项目地址:https://gitcode.com/GitHub_Trending/py/pyxel
点击查看免费下载

相关推荐

上一篇:抖音TikTok数据采集终极指南:5分钟掌握DouK-Downloader批量下载技巧
下一篇:Potatis未来路线图:终极NES模拟器的全新功能与跨平台扩展计划

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/26 10:07:02

OPEN SQL 简介:在 Cline 中配 TaoToken 统一 Key 的 settings.json 骨架

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/26 10:06:38

Substrate区块链开发框架实战:从零搭建一条自定义链

Substrate这个名字,在开发者圈子里有好几种含义。如果你在生物实验室听到它,那是指酶反应的底物;如果在材料实验室听到,那是指镀膜或涂层的基底材质。但如果你是在区块链技术社区里听到它——那99%的情况下,它指的是Pa…

作者头像 李华