小编Kat*_*ath的帖子

如何在C#中加载PNG并导出到TGA保持alpha?

我正在编写一个工具来自动化我们为游戏制作的一些资产.我想要做的是获取PNG文件的文件夹,将它们组合成纹理图集,然后将图集导出为TGA,将UV坐标导出为XML.

我不确定我应该使用哪种方法在C#中加载PNG文件,因为似乎有几种.在C#中加载图像的推荐方法是什么,可以访问颜色/ alpha数据,以便将其提取到TGA?

我也已经在C++中创建了TGA创建代码,我打算转到C#,但我想知道.Net中是否有任何可用于创建/保存TGA的东西?

谢谢阅读.

.net c# png alpha tga

6
推荐指数
1
解决办法
4904
查看次数

将对象传递给UITypeEditor

我目前希望使用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)

我一直在看我的选择,他们似乎是:

  1. 使管理类静态.

我真的不想这样做.有几个管理类,因为每个资源的加载方式不同.还有一些类需要在这些类之前创建并传入.

  1. 使管理类单身.

我也不想这样做.这似乎是一种快速而肮脏的方式来"隐藏"问题而不是"解决"它.我也可能希望将来有一些管理类可供单身人士消除.

  1. 创建一个包装类,它包含对管理类及其目标(例如XNA …

c# propertygrid uitypeeditor

5
推荐指数
1
解决办法
3900
查看次数

在C#中重构大型交换机的建议

我在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)

c# switch-statement

2
推荐指数
2
解决办法
566
查看次数

标签 统计

c# ×3

.net ×1

alpha ×1

png ×1

propertygrid ×1

switch-statement ×1

tga ×1

uitypeeditor ×1