1

由于 VB.NET 的各种缺点(糟糕的音频支持、执行过程中没有读取事件、键盘输入非常弱等),我最终无法进一步使用我的程序。所以我尝试了 SDL.NET 6.1。
尽管它的文档很糟糕,但我能够修复我的代码以使用它,我喜欢它!

但是有一个问题。我不知道如何为它设置我的应用程序设置。启动对象绝对应该是一个类(示例总是在类中,而不是模块中),但启动类必须是一个表单!这很糟糕,因为 SDL 通过 SetVideoMode 创建自己的窗口;你不需要表格。因此,当表单构造函数 New() 完成时,会创建一个无用的表单,并且您有两个窗口。

我尝试在 New() 中调用游戏引擎循环,以便游戏在 New() 没有完成的情况下启动。游戏运行正常,这样就解决了“第二个窗口”的问题……但是无法关闭! X 按钮什么都不做,对 Events.QuitApplication 或 Me.Close 的调用被公然忽略,等等。

我难住了。看来我需要设置一个非表单类作为启动对象,但它不会让我。

哦,对了,好像有两个东西叫做“SDL NET”。为了澄清,我正在使用这个,它存在于SdlDotNet命名空间中。

哦,我忘了提,我还注意到很多例子都有一行写着“[STAThread]”。这很重要吗?

编辑:我已经收到并接受了我的问题的答案,但我想告诉其他人退出/关闭应用程序的问题是什么,即使这不是我的问题:
虽然 SDL.NET 允许您接收输入和运行其他事件而不必停止运行逻辑,应用程序在逻辑运行时仍然无法退出。所以我发现告诉你的 SDL.NET 应用程序在运行逻辑中退出的最佳方法是使用以下两行:

SdlDotNet.Core.Events.QuitApplication
End

将这些放置在 SdlDotNet.Core.Events.Quit 事件的处理程序中,以及您希望程序退出的任何其他位置。

4

1 回答 1

1

启动对象绝对应该是一个类(示例总是在类中,而不是模块中)

这是你的错误。从 CLR 的角度来看,类和 VB 模块之间没有真正的区别。因此,只需将其作为一个模块Main并继续。不需要上课。我怀疑您正在查看使用类的 C# 示例 - 但那是因为 C# 中没有模块之类的东西。

[STAThread]可能不会对 SDL 产生任何影响。它对 UI 应用程序很重要(WinForms 和 WPF 都需要它),但我认为 SDL 不会执行任何 COM 调用,因此它不应该关心您的线程是否是STA。这只是 Visual StudioMain默认在新项目中使用的东西。

于 2009-09-01T21:05:02.873 回答