Programmering af spil i C # vha. SDL.NET

Et af problemerne med open source er, at projekter sommetider ser ud til at falde ved vejen eller tage forvirrende vendinger. Tag SDL.NET. Når man ignorerer webstedet til salg, afslører en søgning på Internettet cs-sdl.sourceforge.net et projekt, der ser ud til at være stoppet i november 2010. Vi tror ikke, det er stoppet, men bare ser ud som det har gjort.

Hvis du ikke kender C #, skal du først lære at gøre det program i C #. Ser vi andre steder, kom vi over Tao-rammen, der er knyttet på Mono-webstedet, som ser ud til at dække det samme område og tilføje støtte til lyd osv. Men når man ser på sourceforge (igen!), Er det blevet erstattet af OpenTK men fokuset der er OpenGL. Det inkluderer dog også OpenAL, så installation af de to (cs-sdl og OpenTK) syntes at være vejen frem.

En del af OpenTk-installationen mislykkedes; NS (shader), fordi vi ikke har VS 2008 installeret! Resten af ​​det var dog ok. Vi oprettede et C # Console-projekt og begyndte at spille med SDL.NET. Online-dokumentationen kan findes her.

instagram viewer

Når vi ser tilbage, kan vi se, at OpenTK-rammen ikke var nødvendig som sådan, at SDL.NET installerede alt, men det var ikke klart på det tidspunkt. Den bruger stadig Tao Framework, selvom udvikling af dette er blevet erstattet af OpenTK. Det er lidt forvirrende, og vi håber, at SDL.NET-teamet vil fremlægge en OpenTk-kompatibel version i fremtiden.

Som vi troede, det er ikke bare en tynd indpakning omkring SDL, men tilføjer betydelig ekstra funktionalitet. Der er et antal klasser til rådighed for at give følgende:

Find de to SDL.NET-dlls (SdlDotNet.dll og Tao). Sdl.dll) såvel som OpenTK dlls, og tilføj dem til projektreferencerne. Efter installationen er dlls placeret i Program Files \ SdlDotNet \ bin (på et 32 ​​bit Windows og Program Files (x86) \ SdlDotNet \ bin på 64 bit Windows. Højreklik på afsnittet Referencer i Solution Explorer, klik derefter på Tilføj reference og vælg fanen Gennemse. Det åbner en Explorer-dialogboks, og vælg derefter og klik på ok, når du har fundet dlls.

En sidste ting, skal du klikke på Vis \ Egenskaber, så det åbner egenskabssiderne og på den første fane (Application) Skift output-type fra Console Application til Windows Application. Hvis du ikke gør dette, når programmet først kører og åbner SDL-hovedvinduet, åbner det også et konsolvindue.

Vi er nu klar til at starte, og jeg har oprettet en kort ansøgning nedenfor. Dette blæser tilfældigt store og placerede rektangler og cirkler på vindueoverfladen med 1.700 tegnet i sekundet med en billedhastighed på 50 billeder pr. Sekund.

At 1.700 stammer fra at indstille det antal, der er trukket pr. Ramme, til 17 og vise rammerne pr. Sekund i vinduet billedtekst ved hjælp af Video. WindowCaption. Hver ramme tegner 17 fyldte cirkler og rektangler, 17 x 2 x 50 = 1.700. Dette tal afhænger af videokortet, CPU osv. Det er en imponerende hastighed.

// Af David Bolton, http://cplus.about.com
ved hjælp af system;
ved hjælp af System. Tegning;
ved hjælp af SdlDotNet. Grafik;
ved hjælp af SdlDotNet. Core;
ved hjælp af SdlDotNet. Grafik. primitiver;
offentlig klasse ex1
{
privat konst int bredde = 1024;
privat konst int wheight = 768;
privat statisk overfladeskærm;
privat statisk Tilfældig r = ny Tilfældig ();
public static void Main (streng [] args)
{
Skærm = Video. SetVideoMode (bredde, vægt, 32, falsk, falsk, falsk, sand);
Begivenheder. MålFps = 50;
Begivenheder. Afslut + = (AfslutEventHandler);
Begivenheder. Tick ​​+ = (TickEventHandler);
Begivenheder. Løb() ;
}
privat statisk tomrum QuitEventHandler (objekt afsender, QuitEventArgs args)
{
Begivenheder. Afslut ansøgning ();
}
privat statisk tomrum TickEventHandler (afsender af objekt, TickEventArgs args)
{
for (var i = 0; i <17; i ++)
{
var rect = nyt rektangel (nyt punkt (r. Næste (bredde-100), r. Næste (wheight-100)),
ny størrelse (10 + r.) Næste (bredde - 90), 10 + r. Næste (vægt - 90)));
var Col = Farve. FraArgb (r. Næste (255), r. Næste (255), r. Næste (255));
var CircCol = Farve. FraArgb (r. Næste (255), r. Næste (255), r. Næste (255));
kort radius = (kort) (10 + r. Næste (vægt - 90));
var Circ = ny cirkel (nyt punkt (r. Næste (bredde-100), r. Næste (wheight-100)), radius);
Screen. Fyld (rekt, kol);
Circ. Tegn (skærm, CircCol, falsk, sand);
Screen. Opdatering ();
Video. WindowCaption = Begivenheder. Fps. ToString ();
}
}
}

Video indeholder metoder til at indstille videotilstand, oprette videooverflader, skjule og vise musemarkøren og interagere med OpenGL. Ikke at vi laver OpenGL et stykke tid.

Her bruges videoobjektet til at indstille størrelsen og opløsningen på spilvinduet (fuld skærm er en mulighed). Parametrene til SetVideoMode giver dig mulighed for at ændre disse og 13 overbelastninger giver masser af variation. Der er en .chm-fil (Windows html-hjælpeformat) i doc-mappen, der dokumenterer alle klasser og medlemmer.

Begivenhedsobjektet har en Quit events handler, der giver dig mulighed for at tilføje lukningslogik, og du skal kalde begivenheder. Afslut applikation () for at få det til at reagere på, at brugeren lukker applikationen. Begivenhederne. Tick ​​er muligvis den vigtigste begivenhedshåndterer. Det kalder den angivne begivenhedshåndterer hver ramme. Dette er modellen til al SDL.NET-udvikling.

Du kan indstille din ønskede billedhastighed og min reducere loopen til 5 og ændre Targetfps til 150, og vi fik den til at køre med 164 billeder pr. Sekund. TargetFps er en ballpark-figur; det medfører forsinkelser for at komme dig nær dette tal, men begivenhederne. Fps er det, der leveres.

Ligesom den originale ikke Windowed-version af SDL, bruger SDL.NET overflader til gengivelse på skærmen. En overflade kan konstrueres ud fra en grafikfil. Der er et stort antal egenskaber og metoder, der gør det muligt at læse eller skrive pixels såvel som tegne grafikprimitiverne, blit andre overflader, dumpe endda en overflade til en diskfil, der skal tages screenshots.