由于VB.NET的各种缺点(错误的音频支持,执行中没有读取事件,键盘输入非常弱等),我最终无法继续使用我的程序。所以我尝试了SDL.NET 6.1 尽管它的文档很糟糕,但我能够修复我的代码以使用它,我喜欢它!
但是有一个问题。我不知道如何为它设置我的应用程序设置。启动对象肯定应该是一个类(示例总是在类中,而不是模块),但启动类必须是一个表单!这很糟糕,因为SDL通过SetVideoMode创建自己的窗口;你不需要表格。因此,当表单构造函数New()完成时,会创建一个无用的表单,并且您有两个窗口。
我尝试在New()中调用游戏引擎循环,以便游戏启动时没有New()完成。游戏运行正常,这解决了“第二个窗口”问题... 但它无法关闭! X按钮什么都不做,对Events.QuitApplication或Me.Close的调用被公然忽略,等
我很难过。我似乎需要将非表单类设置为启动对象,但它不会让我。
哦,顺便说一句,似乎有两件事叫做“SDL NET”。为了澄清,我正在使用this one,它存在于 SdlDotNet 命名空间中。
哦,我忘了提及,我也注意到很多例子都有一行说“[STAThread]”。这很重要吗?
修改:
我已经收到并接受了我的问题的答案,但我想告诉其他人退出/关闭应用程序的问题是什么,即使这不是我的问题:
虽然SDL.NET允许您接收输入并运行其他事件而无需停止运行逻辑,但应用程序在运行逻辑时仍无法退出。因此,我发现在运行逻辑的过程中告诉SDL.NET应用程序退出的最佳方法是使用以下两行:
SdlDotNet.Core.Events.QuitApplication
End
将它们放在SdlDotNet.Core.Events.Quit事件的处理程序中,以及您希望程序退出的任何其他位置。
答案 0 :(得分:1)
Startup Object肯定应该是一个类(示例总是在类中,而不是模块)
这是你的错误。从CLR角度来看,类和VB模块之间没有真正的区别。所以只需将其作为Main
的模块,然后继续。没有必要上课。我怀疑你正在查看使用类的C#示例 - 但这是因为C#中没有模块这样的东西。
[STAThread]
可能对SDL没有任何影响。对于UI应用程序(WinForms和WPF都需要它)很重要,但我不认为SDL会进行任何COM调用,所以它不应该关心你的线程是否是STA。这只是Visual Studio默认在新项目中放置Main
的东西。