如何初始化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);
}
}
这可能是SdlDotNet.dll中的错误。当我引用DLL的6.1版本时,我收到相同的运行时错误。当我引用DLL的5.0版本时,它运行良好。
请注意,v5使用了一组稍微不同的Surface初始化,因此您可能需要调整您的代码。