具有不同参数的多个导入/导出方法

本文关键字:导入 方法 参数 | 更新日期: 2023-09-27 18:07:13

我有2个导出方法(计划有更多),基本上是从我的精灵制造者获取我的精灵定义,并将其导出为PNG文件和描述PNG的XML文件。现在,我已经将这两个方法塞进了我的Sprite类中进行测试,但它们实际上并不属于这里。所以我想,如果我为导出器和导入器做一个接口,然后为每种类型的导入器/导出器分别设置一个类,对吗?

现在的问题是我的两个方法没有相同的参数,所以我不能很容易地使用一个接口。

第一个导出器是一个"有组织的"导出器,它以一种人类可以轻松遵循的方式导出框架,没有任何限制。它只需要精灵定义和文件名(没有扩展名),然后生成这对文件。

第二个导出器是一个最佳打包的导出器,它将使用相同的参数加上最大宽度和高度。现在它不是最优的,它不会重新调整帧的大小,它只是选择下一个合适的插槽。也许还有其他的选项(参数)是我还没有想到的。

XML与现有的导出器相同,但PNG不同。将来,我可能希望有其他类型的元数据导出器,比如JSON。

对于现有的导出器,它们都遵循以下模式:

  • 确定输出PNG的大小(每种方法的不同)
  • 创建大小为
  • 的位图对象设置,并开始写入我的XML文件
  • 写一堆与帧无关的元数据
  • 遍历每个序列(比看起来更复杂)
    • 每帧:
      • 确定帧的位置(每个方法的不同)
      • 写入有关该帧的信息,包括精灵表位置&size from above
      • 绘制帧到输出位图的位置&以上计算的尺寸
  • 保存并关闭文件

我可以提供一个链接到代码的要求。

(我在问题中添加了"进口商",因为有一天我想在这些出口商中添加进口商)

关于我如何将这些导出器从Sprite类中拉出以及如何保持它们相关的任何建议?

具有不同参数的多个导入/导出方法

我想这将是最好的,如果你创建一些基本的导出类,只有一些基本功能之间共享的所有导出类,如addSpritesaveToFile。之后,您可以创建一些继承此类的其他类,并且它们具有添加保存参数的特定函数,例如:

class baseExported
{
    public abstract void addSprite(Bitmap texture);
    public abstract bool export(String target);
};
class ExporterA : baseExporter
{
    public override void addSprite(...) {...};
    public override bool export(...) {...};
}
class ExporterB : baseExporter
{
    public override void addSprite(...) {...};
    public override void setMaxDimentions(int maxHeight,int maxWidth) {...};
    public override bool export(...) {...};
}
class ExporterC : baseExporter
{
    public override void addSprite(...) {...};
    public override void setMaxDimentions(int maxHeight,int maxWidth) {...};
    public override void addMetaData(String someData) {...};
    public override bool export(...) {...};
}

我将为每个唯一的目标(PNG、XML等)定义一个导出器。然后,我将构建实现其中一个或多个接口的export类。您可以通过工厂实例化它们("给我所有处理png/图像的导出器")。其中之一就是SpriteExporter

这个的一个变化(但不是唯一的)是根据输入(他们可以输出什么)对出口商进行分类/组织。

不是说IPNGExporter.ExportToPNG(Sprite),而是说IPNGExporter.ExportToPNG(IExportable)

你可以进一步设置为IExportableToImage,但我不认为这能给我的脑海中增加多少价值