您好SDL:您的第一个图形窗口C#

首先,我们必须从GitHub下载SDL表格并添加dll作为参考。 如图所示,添加一些必需的名称空间SDL。

现在需要IntPtr来存储窗口和Surface的地址。

公共IntPtr _Window; // SDL窗口的指针

公共IntPtr _Surface; //表面的ponter

SDL表面只是2D图像。 可以从文件中加载2D图像,也可以是窗口内部的图像。 在这种情况下,它将是我们在屏幕上的窗口内部看到的图像。 声明窗口和屏幕表面后,我们初始化SDL。 您必须先初始化SDL才能调用任何SDL函数。 由于我们所关心的只是使用SDL的视频子系统,因此我们只会将其传递给SDL_INIT_VIDEO标志。

SDL_Init(SDL_INIT_VIDEO)用于初始化sdl,如果失败,则返回-1,因此使用如下用法。

如果(SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO)<0)

抛出(新的InvalidOperationException(“初始化SDL时发生错误”));

现在是时候创建一个窗口了。如果SDL成功初始化,我们将要使用SDL_CreateWindow创建一个窗口。 第一个参数设置窗口的标题或窗口的该部分:接下来的两个参数定义创建窗口的x和y位置。由于我们不在乎创建窗口的位置,因此只需将SDL_WINDOWPOS_UNDEFINED放入x和y即可。位置。

接下来的两个参数定义窗口的宽度和高度。 最后一个参数是创建标志。 SDL_WINDOW_SHOWN确保在创建窗口时显示该窗口。

如果有错误,SDL_CreateWindow返回NULL。 如果没有窗口,我们想抛出异常。

//如果成功,则创建我们的窗口

_Window = SDL_CreateWindow(“窗口标题”,SDL_WINDOWPOS_CENTERED,

SDL_WINDOWPOS_CENTERED,600,800,SDL_WindowFlags.SDL_WINDOW_SHOWN);

//如果窗口创建成功,则创建渲染器

如果(_Window == null || _Window == IntPtr.Zero)

抛出(新的InvalidOperationException(“初始化Window时发生错误”));

如果成功创建了窗口,则我们希望获取窗口的表面,以便可以对其进行绘制。 SDL_GetWindowSurface就是这样做的。为了简化本教程,我们要做的就是使用SDL_FillRect将窗口的表面填充为白色。 在此不必为此担心太多。 本教程仅关注使窗口弹出。 有关渲染的重要知识是,仅在屏幕表面上绘制了一些内容并不意味着您会看到它。 完成所有绘图后,您需要更新窗口,以便显示您绘制的所有内容。 调用SDL_UpdateWindowSurface将执行此操作。 如果我们要做的就是创建一个窗口,填充它,然后更新它,那么我们将看到的是窗口闪烁一秒钟然后关闭。 为了防止它消失,我们将其称为SDL_Delay。 SDL_Delay将等待给定的毫秒数。 毫秒是1/1000秒。 这意味着上面的代码将使窗口等待2000 1/1000秒或2秒。 需要注意的重要一点是,当SDL延迟时,它不能接受来自键盘或鼠标的输入。 运行该程序时不要惊慌,它不会响应。 我们没有为它提供处理鼠标和键盘的代码。

screenSurface = SDL_GetWindowSurface(window);

SDL_FillRect(screenSurface,NULL,SDL_MapRGB(screenSurface-> format,0xFF,0xFF,0xFF));

SDL_UpdateWindowSurface(window);

窗口延迟在那里2秒钟后,我们将销毁该窗口以释放其内存。 这也将照顾我们从中获得的SDL_Surface。 释放所有内容后,我们退出SDL并返回0以终止程序。

SDL_DestroyWindow(window);

参考:
http://lazyfoo.net/tutorials/SDL/01_hello_SDL/index2.php