Tag:

揭秘SKWarpGeometry

tl; dr :我构建了一个编辑器来使用本机SpriteKit扭曲图像 看起来像我所需要的,但是设置需要手动输入float2的数组-我实在太懒了,无法手动找出所有输入。 我需要一个小工具来调整输入,查看结果并导出。 听起来很简单… 要求 我希望能够加载图像,设置列和行,拉动控制点并将结果导出为Swift代码。 我打开了Xcode,并使用Game项目和SpriteKit&Swift创建了一个新的macOS项目。 我花了几个小时来整理所需的框架,使用NSSplitView和容器视图将视图控制器分离出来,第一个版本如下所示: 在这一点上,我可以加载磁盘映像,显示一个简单的检查器,并在时间轴上显示一个项目…。什么都没有用,因为它是伪造的,您无法选择图像上的黄色手柄,因此检查员的物品什么也没做。 但是我知道我必须证明移动控制点会扭曲精灵。 我在晚上和周末进行此操作,因此在短时间后,我可以拖动控制点并扭曲图像……它开始慢慢融合在一起。 我知道我希望能够单击控制手柄(黄色正方形)并四处移动,并查看精灵的变化。 考虑到这一点,我知道我必须拥有一个Inspector……就像在Xcode中一样,无论您选择什么,都可以拥有一个上下文相关的属性列表,您可以每周两次。 我还知道,通过阅读Apple文档,我可以按顺序应用任意数量的扭曲,因此我决定使用时间轴/图层系统。 同样,这应该是上下文相关的。 除此之外,我还知道整个场景可以具有列*行的任意组合,因此需要一个总体模型来存储它们,因此我填写了一个数据模型,如下所示: 文件模型 — WarpModel — — ControlPointModel DocumentModel将存储: *要使用的图片(实际上只是图片的URL) *控制点的列数和行数。 *经层 WarpModel将存储 * ControlPoints列表 ControlPointModel将存储 *位置,简单的X,Y坐标 我希望我的工具能够保存我决定变形的任何图像的结构,因此我需要实现Swift 4的新Codable接口。 它非常易于使用,并且可以轻松地将数据编码和解码为JSON。 “很容易看到一个简单的想法如何变成许多功能” 然后,我需要(那里不存在很多)来证明我可以从一个几何图形动画到下一个几何图形。 那意味着必须有多层。 每个图层都有自己的一组控制点…但是我想在它们之间设置动画。 图层应具有不同的起点/终点。 如果它们同时启动,您将获得混合结果。 导出代码是应用程序最重要的功能,我不想只看到变形的结果,我需要将其导出并在另一个项目中使用。 每当我对数据进行更改时,该应用程序都会重新生成Swift代码,您可以根据需要复制/粘贴该代码。 选单 再一次,我发现自己要添加要素,在某些位置添加图层,如果您想随时间推移稍微移动控制点,则可以复制图层。 上下移动控制点,旋转控制点。 撤销重做 我不打算构建的另一个功能是撤消/重做,但这确实使您可以将代码结构化为可重用的组件。 我很高兴我做到了。 网格切换 在开发应用程序时,我发现我想像在回放模式下那样打开和关闭网格,或者在擦拭时间轴时希望看到结果,而不是网格使子画面模糊。 我还想查看经线与原始源图像的偏离程度,因此我添加了一个洋葱皮类型的功能,可以在其中看到原始图像,但是在需要时将其关闭 容器视图 容器视图允许您将视图控制器引用嵌入到另一个视图中,这可以使您分离视图。 […]