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

时间:2014-07-01 19:02:47

标签: c# visual-studio-2010 sdl.net

我正在使用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未处理 你调用的对象是空的。 故障排除提示 使用&#34; new&#34;用于创建对象实例的关键字等。

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);
        }
    }

1 个答案:

答案 0 :(得分:0)

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

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