SDL.NET (VB / C #):Каким должен быть объект запуска и тип приложения?

StackOverflow https://stackoverflow.com/questions/1364592

Вопрос

В конечном итоге я не смог продвинуться дальше в своей программе из-за различных недостатков VB.NET (плохая поддержка звука, отсутствие событий чтения в середине выполнения, очень слабый ввод с клавиатуры и т.д.).Итак, я попробовал SDL.NET 6.1.
Несмотря на ужасную документацию, я смог исправить свой код, чтобы использовать его, и мне это нравится!

Но есть одна проблема.Я не знаю, как настроить для этого настройки моего приложения.Объект Startup определенно должен быть классом (примеры всегда находятся в классах, никогда в модулях), но класс startup определенно должен быть формой!Это плохо, потому что SDL создает свое собственное окно через SetVideoMode;вам не нужна форма.Итак, когда конструктор формы New() завершает, создается бесполезная форма, и у вас есть два окна.

Я попытался поместить вызов цикла игрового движка в New(), чтобы игра запускалась без завершения New().Игра работает нормально, и это решает проблему "второго окна"... но она не может быть закрыта! Кнопка X ничего не делает, вызовы Events.QuitApplication или Me.Close откровенно игнорируются и т.д.

Я в тупике.Кажется, мне нужно установить класс non-form в качестве объекта startup, но это мне не позволяет.

О, кстати, кажется, есть две вещи, называемые "SDL NET".Чтобы уточнить, я использую этот, который существует в SdlDotNet пространство имен.

О, я забыл упомянуть, я также заметил, что во многих примерах есть строка с надписью "[STAThread]".Действительно ли это важно?

Редактировать:Я уже получил и принял ответ на свой вопрос, но я хочу рассказать другим людям, в чем проблема с выходом / закрытием приложения, хотя это был не мой вопрос:
В то время как SDL.NET позволяет получать входные данные и запускать другие события без необходимости останавливать выполнение логики, приложение по-прежнему не может завершиться во время выполнения логики.Поэтому я считаю, что лучший способ сообщить приложению sdl.net чтобы выйти в середине выполнения логики заключается в использовании следующих двух строк:

SdlDotNet.Core.Events.QuitApplication
End

Поместите их в обработчик для SdlDotNet.Core.Мероприятия.Завершите мероприятие, а также любое другое место, где вы хотите, чтобы ваша программа завершила работу.

Это было полезно?

Решение

Объект запуска определенно должен быть классом (примеры всегда находятся в классах, а не в модулях)

Вот ваша ошибка.С точки зрения CLR, нет никакой реальной разницы между классом и модулем VB.Так что просто сделайте это модулем с Main и иди дальше.Нет необходимости в классе.Я подозреваю, что вы смотрите на примеры C #, в которых используются классы - но это потому, что в C # нет такого понятия, как модуль.

[STAThread] вероятно, это не будет иметь никакого значения для SDL.Это важно для приложений пользовательского интерфейса (этого требуют как WinForms, так и WPF), но я не думаю, что SDL выполняет какие-либо COM-вызовы, поэтому его не должно волновать, является ли ваш поток STA или нет.Это просто то, что Visual Studio использует Main в новых проектах по умолчанию.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top