DEKI/ENGINE 文档
Deki 0.19.0
面向嵌入式显示屏和桌面的模块化 C++ 2D 引擎
载入中...
搜索中...
未找到
屏幕

一个项目可以在任何屏幕上运行。每台设备都以其原生分辨率渲染,由相机决定显示多大范围的世界。

相机

设置 作用
正交高度 相机从上到下显示多大范围的世界,单位为米。宽度随屏幕的形状而定。在像素模式下,检视器会按你设置的每米像素数显示它:16 px/m 时 11.25 m 显示为 180 px。
像素完美 只按整数倍缩放,并将相机和所有绘制内容吸附到美术像素网格。用于像素画。
投影 正交(平面,用于 2D)或透视(垂直方向的视野,用于 3D 网格)。

形状相同的更大屏幕显示相同的世界范围,只是画得更大。更宽的屏幕在两侧显示更多内容;更窄的屏幕则显示更少。要拉近,请减小正交高度。

每米像素数(项目设置 > 单位)表示美术资源的密度:在 16 px/m 时,一个 16 px 的精灵宽一米。

每种屏幕看到什么

正交高度为 11.25 m 的相机:

屏幕 显示的范围
1280x720 (16:9) 20 x 11.25 m
1920x1080 (16:9) 20 x 11.25 m,以 1.5x 绘制
320x240 (4:3) 15 x 11.25 m:16:9 视图的两侧被裁掉
2560x1080 (21:9) 26.7 x 11.25 m:两侧显示更多
240x320 (竖屏) 8.4 x 11.25 m

将重要的内容放在你所面向的最窄屏幕之内,并在其外侧为更宽的屏幕多构建一些世界,否则玩家会在那里看到相机的清除颜色。

固定到屏幕

HUD 属于屏幕,而不属于世界:左上角的红心、右上角的分数。为对象添加屏幕锚点,并在其网格中选择一个点:一个角、一条边的中点或中心。它的偏移是与该点之间的距离,单位为米,Y 轴向上,因此距左边 0.875 m、向下 1 m 的红心就是“左上”,偏移为 (0.875, -1)。

之后,该对象在每种屏幕上、在相机移动时,都会停留在那个点上。它和其他所有东西一样以米为单位确定大小,因此会随相机缩放:在 320x240 和 536x240 的屏幕上大小相同,在 720p 上则占三倍的像素。

  • 变换的位置由锚点设置,显示为灰色。旋转和缩放仍然来自变换,子对象也照常跟随被锚定的对象。
  • 在场景视图中,对象位于它在运行视图所显示的屏幕上应处的位置;切换该屏幕会移动它。拖动它会更改其偏移。一条线将所选对象与其锚点连接起来。
  • 场景文件存储的是偏移,因此它不会随屏幕变化。

用法示例

2D 像素画。 将正交高度设为美术资源的原生高度:例如,16 px/m 下的 240 px 对应 15 m。开启像素完美。640x480 的屏幕将每个美术像素绘制为 2x2,1280x720 为 3x3,400x300 则以 1x 绘制并多显示一点世界。像素完美向下取整,因此相机显示的范围会比正交高度略多,而不会裁掉任何部分;小于 1x 的屏幕会被裁剪。

2D 高分辨率或矢量美术。 将正交高度设为主屏幕应显示的范围,将每米像素数设为美术资源的密度。每种屏幕都会平滑缩放。渲染器使用最近邻采样,因此缩小很多的美术资源(1280 到 320)在移动时会闪烁:请按接近最小屏幕的尺寸制作。

带 3D 网格的 2D。 与 2D 相同,只是将相机的投影设为透视。视野与正交高度一样是垂直方向的,因此网格和精灵在每种屏幕上都能对齐。精灵仍按平面绘制;在 3D 中放置精灵是下一步的工作。

3D。 将相机设为透视并设置其视野。与正交高度一样,它是垂直方向的:更宽的屏幕在两侧看到更多内容。

预览

运行视图的工具栏用于选择要查看的屏幕,就像 Unity 的 Game 视图一样:

  • 自由比例:面板自身的大小。
  • 宽高比(16:9、16:10、4:3、3:2、21:9、9:16):在面板中能容纳的、该形状的最大屏幕。
  • 分辨率:任意平台的屏幕,或自定义的宽度和高度。

旁边是该屏幕的像素格式。运行时使用这个尺寸和格式。运行期间可以更改尺寸,就像设备的屏幕变了一样;格式则在停止之前保持不变。场景视图中的相机小工具会勾勒出该屏幕所看到的范围;没有相机时,场景视图会在原点周围绘制该屏幕。运行视图会按项目记住这一选择。

DekiEditor --render-scenes 以活动平台的屏幕尺寸和 RGB565 进行渲染;DEKI_RENDER_SIZE=WxH 可渲染其他尺寸,DEKI_RENDER_FORMAT 可渲染其他格式。--export --platform <id> 可为活动平台以外的目标导出。

颜色格式

每种屏幕还有自己的像素格式:大多数小型面板上是 RGB565,桌面上是全彩。由此带来两点。

  • 游戏以屏幕的格式绘制。 显示屏在启动时会告知它接受的格式,就像告知它的尺寸一样。不存在项目范围的颜色格式。
  • 图像按照将要显示它的屏幕来存储。 图像的格式(纹理检视器)默认为自动:在 RGB565 目标上为 RGB565,图像有透明度时为 RGB565A8;在全彩目标上为 RGB888,有透明度时为 RGBA8888。纹理检视器的目标部分以一叠卡片的形式设置它:最前面是默认,包含所有目标都使用的格式(和最大大小),然后每个目标一张卡片,标题为目标名称和图像在该目标上占用的内存。折叠的卡片会说明它存储的内容;展开时显示其值(来自默认的目标值会变暗)。在卡片中选择一个值即可覆盖它;圆点标记覆盖项,列表顶部的默认 (...) 可恢复。导出时会按照每个目标需要的方式存储每张图像。
  • 最大大小位于格式旁边,其作用与 Unity 中的相同:较长边超过该值的图像在存储时会被缩放,使该边恰好等于最大大小,例如在某块开发板上让一张大背景保持较小。无(默认)则从不缩小。缩小后的精灵在世界中保持其尺寸和帧:帧仍以图像的像素表示,并且每一帧都单独重新采样,因此相邻帧不会互相渗色。使用色度键的图像通过挑选像素而不是混合像素来缩小,因此键颜色保持精确。编辑器也会显示活动目标上的尺寸;精灵表编辑器始终在原始图像上工作。附属文件:settings.texture.maxSize,以及每个目标的 settings.texture.targets.<id>: {"format", "maxSize"}(其中 0 = 无)。

平台的 colorFormat 是其屏幕的格式。编辑器自身的缓存跟随活动平台,因此场景视图中显示的就是该目标得到的结果。运行视图的格式下拉列表可以预览其他格式;图像在绘制时进行转换,因此任何格式都能在任何屏幕上绘制。

3D 模型在其 .data 文件中使用相同的格式和最大大小设置,并能绘制到每种帧缓冲格式中。模型的纹理以 2 的幂存储,因此最大大小会对其设置上限;为“无”时上限为 256,这是小型开发板能够常驻内存的大小。

在设备上

帧缓冲区使用显示屏自身的尺寸和格式,在显示屏启动时读取。同一个构建可以在不同尺寸的屏幕上运行。平台的 screenWidth、screenHeight 和 colorFormat 是编辑器预览时使用的值,也是桌面模拟器打开窗口时使用的值。