欢迎访问LearnOpenTK教程的第一个项目。本指南将教你如何从NuGet获取OpenTK,并打开您的第一个窗口。我们承诺这将是一个短暂的。
从NuGet安装
OpenTK已经发布到.NET官方的包管理NuGet上,点击链接下载。OpenTK 3可以安装在.NET Framework 2.0和任何衍生单声道版本上。
在Visual Studio 2013/2015/2017中,点击工具 -> NuGet包管理 -> 程序包管理器控制台来访问程序包管理器
这将调出程序包管理器控制台,一个Visual Studio中NuGet的PowerShell扩展,为了安装OpenTK,在序包管理器控制台中输入以下命令:
Install-Package OpenTK

创建窗口
不像OpenGL,OpenTK自带窗口系统。本教程将教您如何使用它。继续在您喜爱的IDE中创建C#控制台项目,并创建一个名为Game.cs文件,并使用指令添加以下内容:
using OpenTK;
using OpenTK.Graphics;
namespace YourNamespaceHere
{
public class Game
{
}
}
现在我们有一个空白的类,是时候把它变成GameWindow了。要做到这一点,只需继承GameWindow,像这样:
public class Game : GameWindow
现在你的类是一个基本窗口。这很好,但就其本身来说,你什么也做不了。有很多方法可以自定义你的游戏窗口,但在本教程中,我们将创建一个简单的构造函数,让我们设置窗口的宽度,高度和标题。为此,我们重写OpenTK中包含的基本构造函数:
public Game(int width, int height, string title) : base(width, height, GraphicsMode.Default, title)
{
}
你的GameWindow已准备就绪!现在,您所有需要做的就是在程序中创建一个实例。当您之前创建项目时,它也应该创建一个名为Program.cs,其中包含Main函数的文件。若要在程序启动时打开窗口,我们必须:
- 创建
Game类的实例 - 通过调用
Run函数启动所有泵 - 当所有的做完后,释放
Game对象
// 此行创建一个新实例,并在 using 语句中包装实例,以便我们退出块后自动释放实例。
using (Game game = new Game(800, 600, "Learn OpenTK"))
{
//运行需要双精度值,即它应该努力达到的每秒帧数
//你可以把它分出去, 它将按硬件允许它做尽可能的更新
game.Run(60.0);
}
将该代码插入主函数,然后构建并运行程序!你现在有一个空白的窗口,很好!但是,关闭窗口的唯一方法就是使用交叉(X)按钮或Alt+F4.我们不想要这样,让我们做一点点输入处理!
GameWindow有很多方法可以重写,以将各种功能添加到窗口中。您可以查看此网站的"API"部分来查看所有这些内容,但在这种情况下,我们感兴趣的是OnUpdateFrame。
通过简单的敲入override OnUpdateFrame,你的IDE应该能够生成这样的代码
protected override void OnUpdateFrame(FrameEventArgs e)
{
base.OnUpdateFrame(e);
}
检测按键按下真的很简单!OpenTK有一个名为"KeyboardState"类中的IsKeyDown方法,如果按下键,该方法返回true。例如,在按下返回(Esc)键时,KeyboardState.IsKeyDown(Key.Escape)返回true。
当我们按下退出按钮时,我们想退出程序,综上所述,在按下退出键时退出就很简单了
KeyboardState input = Keyboard.GetState();
if (input.IsKeyDown(Key.Escape))
{
Exit();
}
现在,函数看起来应该是这样:
protected override void OnUpdateFrame(FrameEventArgs e)
{
base.OnUpdateFrame(e);
KeyboardState input = Keyboard.GetState();
if (input.IsKeyDown(Key.Escape))
{
Exit();
}
}
总结
在本教程中,我们安装了 OpenTK,创建了一个空白窗口,用于侦听按下的退出键,并在按下退出键时退出。在下一教程中,我们将在刚刚创建的空白窗口上绘制一个三角形。

本教程引导初学者通过NuGet安装OpenTK库,创建首个游戏窗口,并实现键盘输入处理,为后续图形绘制奠定基础。
430





