一个完全没有 3D 通道的 2D 应用:构造函数里的一行把渲染器变成 一个叠加合成器,其余的是面板、文本、形状和精灵。它是工具最小的 有用起点,而且从全新克隆就能构建。
internal App()
{
Title = "Creator";
RenderDomain = RenderDomain.Overlay; // no 3D pass, no depth, no post
StorageService.DirectoryBase = "Creator";
BackgroundColor = Season.Basic.Colors.White;
BasicResolution = new Vector2(1280, 720);
}
RenderDomain.Overlay 买来了什么
场景通道被完全跳过 — 没有深度缓冲、没有阴影图集、没有后处理 链、没有 compute 效果。因此 2D 应用不为它不用的渲染器付钱,而且 立即启动。这是你在构建工具、启动器或 2D 游戏时要用的设置;见 2D 控件。
Create() 启动一个后台任务,先构建四张
MSDF 图集,再设置一个 FontsCreated 标志。
没有东西等它;面板在字体存在的那一刻就渲染。
var fontInstance = await Season.Fonts.Font.CreateAsync(font.File, font.Size);
Season.Fonts.Font.Instance.Add(fontInstance);
| 字体 | 它为什么在那里 |
|---|---|
| NotoSansMono | 拉丁字母和 composer 里的等宽内容。 |
| NotoSansSC、NotoSansTC | 简体与繁体中文。分开加载而不是合并。 |
| Twemoji | 彩色 emoji,来自 Twemoji 集的 COLR 构建。 |
每个 CreateAsync 调用都包在一个记录日志并继续的
try 里,所以缺失或损坏的字体文件让你失去
那种字体,而不是应用。值得抄。
| 面板 | 它是什么 |
|---|---|
Left | 侧边栏:一个搜索框、快捷方式和一个滚动列表。 |
Page | 内容区,在 Chat、Folder、Task 和 Setting 面板之间切换。 |
Top | 标题栏,高 105 像素,相对内容区而不是窗口定位。 |
Bar | 竖屏布局用的底栏,与侧边栏相同的四个目的地。 |
Commands | 命令条:折叠侧边栏、截屏、创建、选择文件夹、打开设置。 |
Chat、Composer | 一个滚动列表和它下面的编辑器。 |
Folder、Task、Setting | 另外三个内容面板。 |
用到的控件:Texts、
Sprite2D 和 Shape 画
一切,外加来自 Season.Panels 的现成
Input、MovePanel 和
SimplePicker 面板处理文本输入、滚动和列表
选择。任何地方都不出现 3D 控件。
没有布局系统,所以响应式就是一个 if。横屏得到
侧边栏并隐藏底栏;竖屏反过来。两个分支然后直接赋尺寸。
if (App.Instance.ExtendResolution.X >= App.Instance.ExtendResolution.Y)
Animation = Animation.HorizontalLeft; // sidebar layout
else
Animation = Animation.Vertical; // bottom-bar layout
// ... then, in the sidebar branch:
Page.PosX = (int)Left.Width;
Page.Width = (int)App.Instance.ExtendResolution.X - Page.PosX;
Page.InnerHeight = (int)(App.Instance.ExtendResolution.Y - (Top.Height ?? 0));
侧边栏滑动也是手写的:一个带
LeftFadeIn 和
LeftFadeOut 状态的
Animation 枚举、一个累加器,以及一个在
AnimationTime = 0.5f 上插值的
Page.PosX。十一行,没有补间库,状态机在一个
地方可见。
Commands 先更新,它的返回值短路掉
Update 的其余部分。被命令条消费掉的
点击永远不会到达它后面的面板 — 那就是整个机制,也是为什么
最上层的东西先更新。
这是一个应用演示,不是游戏。它展示控件层、面板组合模型、异步字体 加载、手写响应式布局和持久化设置 — 这是桌面工具需要的大部分, 也是游戏需要的零部分。
它也从一个全新克隆构建并运行,而
Apps/Engine 目前不能。
如果你想在五分钟内看到引擎在你的机器上启动,从这里开始。
dotnet run --project Samples/Creator -f net10.0-windows10.0.19041.0
dotnet run --project Samples/Creator -f net10.0 # Linux