MIT 许可证 NuGet

首页 / 示例 / Samples/Creator

Samples/Creator

一个完全没有 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