我正在编写一个工具来自动化我们为游戏制作的一些资产.我想要做的是获取PNG文件的文件夹,将它们组合成纹理图集,然后将图集导出为TGA,将UV坐标导出为XML.
我不确定我应该使用哪种方法在C#中加载PNG文件,因为似乎有几种.在C#中加载图像的推荐方法是什么,可以访问颜色/ alpha数据,以便将其提取到TGA?
我也已经在C++中创建了TGA创建代码,我打算转到C#,但我想知道.Net中是否有任何可用于创建/保存TGA的东西?
谢谢阅读.
我目前希望使用PropertyGrid来允许用户编辑我的一些类,但是我已经碰到了将对象传递给他们使用的UITypeEditor的墙.当用户按下下拉列表时,我想显示已加载纹理的列表框以供选择,如果他们想要使用应用程序尚未加载的纹理,他们可以单击按钮从文件对话框中选择一个.如果我在这里没有意义的形式的模拟:
.
我的问题:要填充列表框,我需要访问管理UITypeEditor资源列表的类.
现在我已经为我自己的类解决了这个问题,给他们一个关于创建它们的管理对象的参考.在UITypeEditor中,我然后使用该引用来访问我需要的内容.但是,对于我没有编写的类,例如XNA Texture2D类,我不能这样做.
以下是我正在使用的类:
class StaticGeometryChunk
{
// Geometry data to draw with. Contains a reference to its managing
// class for use in its UITypeEditor.
public GeometryData { get; set; }
....
}
class Material
{
// These are XNA classes. I can't just add a reference to its managing
// class (I think?).
public Texture2D Texture1 { get; set; }
public Texture2D Texture2 { get; set; }
....
}
Run Code Online (Sandbox Code Playgroud)
我一直在看我的选择,他们似乎是:
我真的不想这样做.有几个管理类,因为每个资源的加载方式不同.还有一些类需要在这些类之前创建并传入.
我也不想这样做.这似乎是一种快速而肮脏的方式来"隐藏"问题而不是"解决"它.我也可能希望将来有一些管理类可供单身人士消除.
我在C#/ Winforms中有一个应用程序,它允许用户在网格上放置对象以创建游戏关卡.它有几个工具用于放置瓷砖/灯/门/实体等.目前我只使用枚举来存储当前选定的工具,并有一个switch语句来运行每个工具代码.因为我一直在为应用程序添加更多工具,所以它开始像意大利面一样,有很多重复的代码.
这是我的编辑器类中的鼠标按下功能的缩减版本:
public void OnEditorViewMouseDown(Point mousePos)
{
// Check if the click is out of bounds.
if (IsLocationOOB(mousePos)) return;
if (CurrentTool == ToolType.GroundTile)
{
// Allow drags along whole tiles only.
m_DragManager.DragType = DragManager.DragTypeEnum.Tile;
m_DragManager.StartDrag(mousePos);
}
else if (CurrentTool == ToolType.WallTile)
{
// Allow drags along grid edges only.
m_DragManager.DragType = DragManager.DragTypeEnum.Edge;
m_DragManager.StartDrag(mousePos);
}
else if (CurrentTool == ToolType.PostTile)
{
// Allow drags along grid points only.
m_DragManager.DragType = DragManager.DragTypeEnum.Point;
m_DragManager.StartDrag(mousePos);
}
else if (CurrentTool == ToolType.AreaLight)
{
// …Run Code Online (Sandbox Code Playgroud)