代码编辑器与播放器

Pyxen 把代码编辑器和正在运行的游戏放在同一个窗口里。你在代码面板里写 Pyxen Script,在旁边的预览里玩你的游戏。

代码编辑器

编辑器为 Pyxen Script 着色,并在你输入时检查代码:问题显示在所在的行,并附上原因。

在 Mac 上,以及连接了硬件键盘的 iPad 上,常用快捷键都能用:选择、拷贝、粘贴、撤销、重做。鼠标或触控板可以精确放置光标。

输入时的参数

输入调用的 (,比如 world.get( 或 hero.tween(,行的上方会出现一张卡片,显示这个调用接受什么:它的参数、高亮的当前参数、该参数在参考文档中的说明,以及打开其页面的 参考 ›。它会跟着你跨过逗号、进入内层调用,输入收尾的 ) 时消失。你自己写的函数也有卡片,显示 docstring 的第一行。

行下方的列表先给出合适的内容:world.get( 时是项目中写出的实体名称,ease= 后是缓动名称,然后是调用还没给出的关键字,最后是常用的名称。它只认识以文字写出的名称,所以游戏运行时才命名的实体不会出现。

按一次 Esc 关闭列表,按两次隐藏这个调用的卡片。Cmd+Shift+Space(编辑 › 显示参数)让它回来,Ctrl+Space(编辑 › 显示补全建议)打开列表。在 iPad 上,轻点卡片会打开参考文档;使用屏幕键盘时,在调用里输入栏的 . 键会输入 ,。

输入时的素材

在调用接受的名称的引号里,比如 Sprite("、Sound("、Music("、Text(…, font=" 或 GridMap(tilemap=",列表会列出项目中这类素材,然后是每个素材包里的,每一项都带图:图像显示第一个图块(或整张图像)以及尺寸和动画,字体用它写出调用里的文字,地图画成缩略图。在 animation=" 之后,列表会列出同一调用中所命名图像的动画,每个都在播放。当前选中的一项会在列表旁放大显示,并有 在精灵中打开 ›(或对应其类型的面板)可以打开它。

声音和音乐带有 ▶:点按它,或在选中的一项上按 Option+Return(编辑 › 显示选择器)即可试听。在列表中移动时不会播放任何声音,按 Esc 停止。声音库中的声音写作 "bank/sound"。

列表只认识以文字写出的名称:存放在变量里或由几部分拼成的名称不会有列表,卡片会说明它在游戏运行时才确定。开启系统的“减弱动态效果”时,动画保持静止。

在图块参数中,如 Sprite("tiles", tile=( 或地图的 level.set(…, tile=(,图块选择器会在该行下方打开调用所指的图像,并显示其网格。点按一个图块,或拖过多个图块:选取时数字随即写入代码,精灵以像素表示 (x, y, w, h),地图以格表示 (column, row)。自己输入数字,选取也会随之移动。按 Return 保留(在 iPad 上点按完成),按 Esc 恢复原来的内容,一次撤销即可撤回整个选取。遇到空的 tile=( 时它会自动打开;对已写好的图块,点按数字前面的小图,或按 Option+Return(编辑 › 显示选择器)再用方向键(按住 Shift 选取更多图块)。由常量算出的数字,如 HERO * 16,以虚线显示,选择器会在写入数字覆盖它之前说明。没有网格的图像按数字已给出的大小选取,否则以 16 像素为单位。

按住 Cmd 并把指针移到代码中的素材名上,例如 Sprite("ninja", animation="run") 中的 "ninja":名称会加上下划线,并有一张卡片显示该素材的图片、尺寸和动画。Cmd+点按它,会在调用所指的位置用编辑器打开素材:精灵编辑器打开在 run 动画上,tile=(16, 0, 16, 16) 的矩形被选中,或者声音库中的声音(Sound("sfx/coin"))在其声音库中被选中。项目中没有的名称不会打开任何东西。

反过来也可以:素材的面板会显示在代码中使用,以及脚本中有多少行用到它。在它的菜单中选择一行即可跳到那一行。面板的栏太窄放不下时,它位于面板 ⋯ 菜单的顶部。

项目中没有的名称,例如 Sprite("ninjaa") 中的 "ninjaa",在运行游戏之前就会以琥珀色下划线标出。把光标放在上面,卡片会显示“项目中没有名为“ninjaa”的内容。”,并提供 使用“ninja” 以最接近的名称替换,以及 新建图片… 来创建它(对应类型为 新建瓦片地图…、新建字体… 或 新建音效库…)。图片中没有的动画也会同样标出,同一个 Sprite 中同时写了 tile= 和 animation= 也会标出,因为二者不能同时使用。这些是警告而不是错误:游戏照常运行,因为名称可能来自你之后添加的素材包。只检查以文本形式写出的名称。

跳转到符号

按 Cmd+Shift+O(编辑 › 跳转到符号…)列出项目中的函数和名称,以及参考文档的条目。输入以筛选,然后选择一项即可跳转过去。

跳转到定义

Cmd+点按函数名或变量名,或者把光标放在上面按 Cmd+J(编辑 › 跳转到定义),就会跳到它的定义处。这在项目的各个文件之间都有效:如果函数定义在 utils.py 中、在 main.py 中调用,Cmd+点按会直接带你过去。一个名称有多个定义,或在项目中没有定义时,会以它打开跳转到符号。

按单词移动

使用 Option+方向键,光标一次移动一个单词而不是一个字符。配合 Shift 可以按单词选择,便于快速选中变量名或函数调用。

文字大小和主题

按 Cmd+= 放大代码,按 Cmd+- 缩小代码,也可以选择显示 › 放大文字和缩小文字。在设置 › 编辑器中,可以把大小设为 10 到 32 磅,并从十种代码主题中选一种:“自动”会随外观使用 Pyxen Dark 或 Pyxen Light;其他主题有 Pyxen Deep Dark、Pyxen Deep Light、Dracula、GitHub Light、One Dark、One Light、Solarized Dark 和 Solarized Light。

在较窄的 iPad 窗口中

当窗口宽度小于 900 点时(竖屏的 11 英寸 iPad、Split View、Slide Over),Pyxen 一次显示一个面板,其他面板成为上方的标签,面板的工具位于窗口底部的托盘中。轻点托盘的把手可以调高或调低,向下拖动可以收起。代码面板的托盘包含:

屏幕键盘弹出时,代码按键位于键盘上方的一行;使用硬件键盘时,代码面板没有托盘。

运行你的游戏

选择运行(Cmd+R)来检查、编译并运行你的代码。游戏在预览中启动。停止(Cmd+.)结束游戏,预览栏中的暂停让它停在某一帧。

如果代码有错误,Pyxen 会在所在的行显示错误信息。修复后再次运行。

帧检查器

当你暂停正在运行的游戏时,帧检查器会激活。这是 Pyxen 的内置调试器。

检查器让你可以:

时间拖动条

Pyxen 在游戏运行时记录多达 300 帧的历史(每秒 30 帧,即 10 秒)。暂停后,你可以前后拖动浏览时间线。

每一帧在内存预算内保留它的实体和绘制内容:实体多或 draw 多的重负载游戏会保留更少的帧,最旧的先被丢弃,时间线会显示能回溯多远。在 设置 › 游戏预览 › 调试器 › 历史内存 中设置预算。它从为你的设备推荐的值开始(显示在下方),大多数游戏都能保留 300 帧。

这意味着你可以:

时间拖动条将调试从猜测变成了观察。不用添加 print 语句然后重新运行,你只需暂停、回溯、查看。

工作流

Pyxen 中的典型工作流:

  1. 在编辑器中编写或修改代码
  2. 运行以测试
  3. 如果有问题,暂停游戏
  4. 向前拖动时间线找到出错的那一帧
  5. 检查实体,查看哪个状态不符合预期
  6. 停止,修复代码,重复