如何初始化sdl.net中的表面变量

本文关键字:表面 变量 net 初始化 sdl | 更新日期: 2023-09-27 18:10:57

我正在使用Visual c# 2010 Express和SDL.net图形库。

我尝试用SurfaceControl类在winform上绘制,但无法创建一个空白的表面来绘制。我发现只有一个工作的例子与位图,虽然有这样的方法在http://cs-sdl.sourceforge.net/apidocs/html/class_sdl_dot_net_1_1_graphics_1_1_surface.html

Surface (int width, int height) // "Create surface of a given width and height."`
我代码:

private void surfaceControl1_Click(object sender, EventArgs e)
{
  Surface surf = new Surface((Bitmap)Bitmap.FromFile("example.png"));
  surfaceControl1.Blit(surf, new Point(0, 0));
  surfaceControl1.Blit(surf, new Point(20, 20));
  // this works
  Surface surf2 = new Surface(20, 20); // <- throws exception on click
  surf2.Fill(Color.White);
  surfaceControl1.Blit(surf2);
}

也尝试:

  Surface surf2 = new Surface(this.surfaceControl1.Width,this.surfaceControl1.Height);

NullReferenceException未处理未设置为对象实例的对象引用。故障排除技巧:使用"new"关键字创建对象实例。等。

SDl.net有示例文件与源,它使用相同的方法来初始化表面变量,但我的抛出异常。找不到使用SurfaceControl的示例或教程。有什么想法我做错了吗?

也找到这个教程http://www.microbasic.net/2011/08/using-sdl-with-c/它使用以下代码:

Surface surface = new Surface(100, 100); //same error here
Surface item = new Surface((Bitmap)Bitmap.FromFile(“example.png”));
surface.Blit(item, new Point(0, 0));
surface.Blit(item, new Point(20, 20));
this.surfaceControl.Blit(surface);

但是这段代码也抛出了同样的异常。

更多信息:我设法启动sdl.net SdlDotNetCDPlayer的例子,令人惊讶的是,它抛出相同的异常!虽然我半年前就在我的笔记本电脑上做了这些例子。

protected override void OnResize(EventArgs e)
    {
        try
        {
            surf =
                new Surface(
                this.surfaceControl.Width,
                this.surfaceControl.Height); //exception error
            base.OnResize(e);
        }
        catch (AccessViolationException ex)
        {
            Console.WriteLine(ex.StackTrace);
        }
    }

如何初始化sdl.net中的表面变量

这可能是SdlDotNet.dll中的错误。当我引用DLL的6.1版本时,我收到相同的运行时错误。当我引用DLL的5.0版本时,它运行良好。

请注意,v5使用了一组稍微不同的Surface初始化,因此您可能需要调整您的代码。