C# 如何在sdl.net中初始化曲面变量?
我正在使用Visual C#2010 Express和SDL.net图形库 我尝试使用SurfaceControl类在winform上绘制,但无法创建空的曲面来绘制。我发现只有一个使用位图的工作示例,尽管在中有这样的方法 我的代码:C# 如何在sdl.net中初始化曲面变量?,c#,visual-studio-2010,sdl.net,C#,Visual Studio 2010,Sdl.net,我正在使用Visual C#2010 Express和SDL.net图形库 我尝试使用SurfaceControl类在winform上绘制,但无法创建空的曲面来绘制。我发现只有一个使用位图的工作示例,尽管在中有这样的方法 我的代码: private void surfaceControl1_Click(object sender, EventArgs e) { Surface surf = new Surface((Bitmap)Bitmap.FromFile("example.png"))
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);
}
未处理NullReferenceException
对象引用未设置为对象的实例。
故障排除提示:
使用“new”关键字创建对象实例。。等等
SDl.net有带源代码的示例文件,它使用与我相同的方法初始化曲面变量,但我的方法引发异常。找不到使用SurfaceControl的示例或教程。你知道我做错了什么吗
也找到了这个教程
它使用以下代码:
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);
}
}
这可能是SdlDotNet.dll中的错误。当我引用DLL的版本6.1时,我收到相同的运行时错误。当我引用DLL的5.0版时,它运行良好
请注意,v5对曲面使用了一组稍有不同的初始化,因此您可能需要调整代码。这并不糟糕,因为它不符合我的需要,因为它没有提供信息,不足以理解或从中创建工作示例。示例代码不起作用,并且没有解释为什么不起作用。我使用了其他教程,与此()相比,它非常棒。然后停止使用这样的单词!我为我的不尊重感到抱歉。@L.B你能删除“重复”符号吗,因为我仔细阅读了关于空异常的建议链接,但没有任何帮助,我认为这是sdl.net的问题,而不是普通的c代码错误。该链接没有适合此问题的sdl.net示例。
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);
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);
}
}