具有不同参数的多个导入/导出方法
本文关键字:导入 方法 参数 | 更新日期: 2023-09-27 18:07:13
我有2个导出方法(计划有更多),基本上是从我的精灵制造者获取我的精灵定义,并将其导出为PNG文件和描述PNG的XML文件。现在,我已经将这两个方法塞进了我的Sprite类中进行测试,但它们实际上并不属于这里。所以我想,如果我为导出器和导入器做一个接口,然后为每种类型的导入器/导出器分别设置一个类,对吗?
现在的问题是我的两个方法没有相同的参数,所以我不能很容易地使用一个接口。
第一个导出器是一个"有组织的"导出器,它以一种人类可以轻松遵循的方式导出框架,没有任何限制。它只需要精灵定义和文件名(没有扩展名),然后生成这对文件。
第二个导出器是一个最佳打包的导出器,它将使用相同的参数加上最大宽度和高度。现在它不是最优的,它不会重新调整帧的大小,它只是选择下一个合适的插槽。也许还有其他的选项(参数)是我还没有想到的。
XML与现有的导出器相同,但PNG不同。将来,我可能希望有其他类型的元数据导出器,比如JSON。
对于现有的导出器,它们都遵循以下模式:
- 确定输出PNG的大小(每种方法的不同)
- 创建大小为 的位图对象设置,并开始写入我的XML文件
- 写一堆与帧无关的元数据
- 遍历每个序列(比看起来更复杂)
- 每帧:
- 确定帧的位置(每个方法的不同)
- 写入有关该帧的信息,包括精灵表位置&size from above
- 绘制帧到输出位图的位置&以上计算的尺寸
- 每帧:
- 保存并关闭文件
我可以提供一个链接到代码的要求。
(我在问题中添加了"进口商",因为有一天我想在这些出口商中添加进口商)
关于我如何将这些导出器从Sprite类中拉出以及如何保持它们相关的任何建议?
我想这将是最好的,如果你创建一些基本的导出类,只有一些基本功能之间共享的所有导出类,如addSprite
或saveToFile
。之后,您可以创建一些继承此类的其他类,并且它们具有添加保存参数的特定函数,例如:
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
,但我不认为这能给我的脑海中增加多少价值