Програмиране на игри в C # с помощта на SDL.NET

Един от проблемите с отворения код е, че понякога проектите сякаш падат край пътя или имат объркващи обрати. Вземете SDL.NET. Пренебрегвайки уебсайта за продажба, търсене в мрежата разкрива cs-sdl.sourceforge.net проект, който изглежда е спрял през ноември 2010 г. Не мислим, че е спрял, а просто изглежда, че има.

Ако не знаете C #, първо ще трябва да научите как да програма в C #. Търсейки другаде, попаднахме на рамката на Дао, свързана в уебсайта Mono, която изглежда покрива същата зона и добавя поддръжка за звук и т.н. Но поглеждайки към sourceforge (отново!), Той е заменен от OpenTK но фокусът там е OpenGL. Въпреки това, той също включва OpenAL, така че инсталирането на двата (cs-sdl и OpenTK) изглежда беше пътят напред.

Част от инсталирането на OpenTk не бе успешно; NS (шейдър), защото нямаме инсталиран VS 2008! Обаче останалото беше ок. Създадохме проект на C # Console и започнахме да играем със SDL.NET. Онлайн документацията можете да намерите тук.

Поглеждайки назад, можем да видим, че OpenTK рамката не беше необходима като такава, че SDL.NET инсталира всичко, но това не беше ясно по това време. Той все още използва Tao Framework, въпреки че разработката му е заместена от OpenTK. Това е малко объркващо и се надяваме, че екипът на SDL.NET ще представи съвместима версия на OpenTk в бъдеще.

instagram viewer

Това, както мислехме, не е просто тънка обвивка около SDL, но добавя значителна допълнителна функционалност. Съществуват редица класове, осигуряващи следното:

Намерете двата SDL.NET dll (SdlDotNet.dll и Tao). Sdl.dll), както и DLT OpenTK, и ги добавете към референциите на проекта. След инсталирането, dlls се намират в програмни файлове \ SdlDotNet \ bin (на 32-битов Windows и програмни файлове (x86) \ SdlDotNet \ bin на 64-битов Windows. Щракнете с десния бутон на мишката върху секцията Референции в Explorer Explorer, след това щракнете върху Добавяне на справка и изберете раздела Преглед. Това отваря диалогов прозорец на Explorer и след намирането на dlls изберете след това и щракнете върху OK.

И последно нещо, щракнете върху View \ Properties, така че да отвори страниците свойство и в първия раздел (Application) Промяна на типа на изхода от приложението на конзолата към приложението на Windows. Ако не направите това, когато програмата първо се стартира и отвори основния прозорец на SDL, тя ще отвори и прозорец на конзолата.

Вече сме готови да започнем и по-долу създадох кратко приложение. Това пробива на произволен размер и разположени правоъгълници и кръгове на повърхността на прозореца със скорост 1 700, изтеглена в секунда при скорост на кадъра от 50 кадъра в секунда.

Това 1700 идва от настройването на числото, изчертано на кадър, на 17 и показването на кадрите в секунда в надписа Window с помощта на Video. WindowCaption. На всеки кадър тя рисува 17 запълнени кръга и правоъгълници, 17 x 2 x 50 = 1700. Тази цифра зависи от видеокартата, процесора и т.н. Това е впечатляваща скорост.

// От Дейвид Болтън, http://cplus.about.com
използване на System;
използвайки System. Рисуване;
използвайки SdlDotNet. графика;
използвайки SdlDotNet. Ядро;
използвайки SdlDotNet. Graphics. примитиви;
публична класа ex1
{
частен const int wwidth = 1024;
частен const int wheight = 768;
частен статичен повърхностен екран;
частен статичен Random r = нов Random ();
публична статична невалидност Main (string [] args)
{
Екран = Видео. SetVideoMode (ширина, ширина, 32, невярно, невярно, невярно, вярно);
Събития. TargetFps = 50;
Събития. Quit + = (QuitEventHandler);
Събития. Отметка + = (TickEventHandler);
Събития. Run ();
}
частна статична невалидна QuitEventHandler (подател на обект, QuitEventArgs args)
{
Събития. QuitApplication ();
}
частна статична невалидна TickEventHandler (подател на обект, аргументи на TickEventArgs)
{
за (var i = 0; i <17; и ++)
{
var rect = нов правоъгълник (нова точка (r. Следващ (ширина - 100), r. На следващо място (на колело-100)),
нов размер (10 + r. Следваща (ширина - 90), 10 + r. Напред (с ширина - 90)));
var Col = Цвят. FromArgb (r. Напред (255), r. Напред (255), r. Напред (255));
var CircCol = Цвят. FromArgb (r. Напред (255), r. Напред (255), r. Напред (255));
къс радиус = (къс) (10 + r. Напред (с ширина - 90));
var Circ = нов кръг (нова точка (r. Следващ (ширина - 100), r. Следваща (ширина-100)), радиус);
Screen. Запълване (rect, Col);
Circ. Рисуване (екран, CircCol, невярно, вярно);
Screen. Актуализация ();
Видео. WindowCaption = Събития. Кадъра в секунда. ToString ();
}
}
}

Video предоставя методи за настройка на видео режима, създаване на видео повърхности, скриване и показване на курсора на мишката и взаимодействие с OpenGL. Не че ще правим OpenGL известно време.

Тук Video object се използва за задаване на размера и разделителната способност на играта Window (цял екран е опция). Параметрите за SetVideoMode ви позволяват да промените тези и 13 претоварвания осигуряват много разнообразие. Има .chm файл (помощен формат на Windows html) в папката doc, документиращ всички класове и членове.

Обектът Events има манипулатор на Quit events, който ви позволява да добавите логика за затваряне и трябва да извикате Events. QuitApplication (), за да отговори на потребителя, който затваря приложението. Събитията. Отметката е вероятно най-важното средство за обработка на събития. Той извиква посочения обработващ събитие всеки кадър. Това е моделът за цялата разработка на SDL.NET.

Можете да зададете желаната от вас честота на кадрите и моето намаляване на цикъла до 5 и промяна на Targetfps на 150, ние го стартираме със 164 кадъра в секунда. TargetFps е фигура на топката; тя закъснява, за да ви приближи до тази цифра, но събитията. Fps е това, което се доставя.

Подобно на оригиналната версия без прозорец на SDL, SDL.NET използва повърхности за изобразяване на екрана. Повърхност може да бъде изградена от графичен файл. Има голям брой свойства и методи, които дават възможност за четене или запис на пиксели, както и нарисувайте графичните примитиви, блъснете други повърхности, дори изхвърлете повърхност в дисков файл за вземане снимки на екрани.