Programmering av spill i C # ved bruk av SDL.NET

click fraud protection

Et av problemene med åpen kildekode er at prosjekter noen ganger ser ut til å falle ved veien eller ta forvirrende svinger. Ta SDL.NET. Hvis du ignorerer nettstedet som er til salgs, avslører et søk på nettet cs-sdl.sourceforge.net et prosjekt som ser ut til å ha stoppet i november 2010. Vi tror ikke det har stoppet opp, men bare ser ut som det har gjort.

Hvis du ikke kjenner C #, må du først lære hvordan du gjør det program i C #. Ser vi andre steder, kom vi over Tao-rammen som er koblet på Mono-nettstedet som ser ut til å dekke det samme området og legge til støtte for lyd osv. Men når du ser på sourceforge (igjen!), Er den erstattet av OpenTK men fokuset der er OpenGL. Imidlertid inkluderer det også OpenAL så det å installere de to (cs-sdl og OpenTK) så ut til å være veien videre.

En del av OpenTk-installasjonen mislyktes; NS (shader) fordi vi ikke har VS 2008 installert! Resten av det var imidlertid ok. Vi opprettet et C # Console-prosjekt og begynte å spille med SDL.NET. Den elektroniske dokumentasjonen finner du her.

instagram viewer

Når vi ser tilbake, kan vi se at OpenTK-rammeverket ikke var nødvendig som sådan, at SDL.NET installerte alt, men det var ikke klart den gangen. Den bruker fremdeles Tao Framework, selv om utviklingen av dette er erstattet av OpenTK. Det er litt forvirrende og vi håper SDL.NET-teamet vil få frem en OpenTk-kompatibel versjon i fremtiden.

Det er ikke, som vi trodde, bare en tynn innpakning rundt SDL, men tilfører betydelig ekstra funksjonalitet. Det er en rekke klasser for å gi følgende:

Finn de to SDL.NET-dllene (SdlDotNet.dll og Tao. Sdl.dll) så vel som OpenTK-dllene, og legg dem til prosjektreferansene. Etter installasjonen er dllene plassert i Program Files \ SdlDotNet \ bin (på en 32-biters Windows og Program Files (x86) \ SdlDotNet \ bin på 64 bit Windows. Høyreklikk på Referanser-delen i Solution Explorer, klikk deretter Legg til referanse og velg kategorien Bla gjennom. Det åpner en Utforsker-dialog, og velg deretter og velg OK etter å ha funnet dll-ene.

En siste ting, klikk på Vis \ Egenskaper slik at det åpnes Egenskapssidene og på den første fanen (Application) Endre outputtype fra Console Application til Windows Application. Hvis du ikke gjør dette når programmet først kjører og åpner SDL-hovedvinduet, vil det også åpne et konsollvindu.

Vi er nå klar til å starte, og jeg har laget en kort applikasjon nedenfor. Dette blender rektangler og sirkler på tilfeldig størrelse og plassert på vindusflaten med 1700 tegnet per sekund med en bildefrekvens på 50 bilder per sekund.

De 1.700 stammer fra å sette antallet tegnet per ramme til 17 og vise rammene per sekund i vinduet bildetekst ved hjelp av Video. WindowCaption. Hver ramme tegner det 17 fylte sirkler og rektangler, 17 x 2 x 50 = 1700. Dette tallet avhenger av skjermkortet, CPU etc. Det er en imponerende hastighet.

// Av David Bolton, http://cplus.about.com
bruker System;
bruker System. Tegning;
bruker SdlDotNet. grafikk;
bruker SdlDotNet. Kjerne;
bruker SdlDotNet. Grafikk. Primitives;
offentlig klasse ex1
{
privat konst int bredde = 1024;
privat konst int wheight = 768;
privat statisk overflateskjerm;
privat statisk tilfeldig r = ny tilfeldig ();
public static void Main (streng [] args)
{
Skjerm = video. SetVideoMode (bredde, vekt, 32, falsk, falsk, usann, sann);
Arrangementer. MålFps = 50;
Arrangementer. Avslutt + = (QuitEventHandler);
Arrangementer. Tick ​​+ = (TickEventHandler);
Arrangementer. Løpe() ;
}
privat statisk tomrom QuitEventHandler (objekt avsender, QuitEventArgs args)
{
Arrangementer. QuitApplication ();
}
privat statisk tomrom TickEventHandler (avsender av objekt, TickEventArgs args)
{
for (var i = 0; i <17; i ++)
{
var rect = nytt rektangel (nytt punkt (r. Neste (bredde-100), r. Neste (wheight-100)),
ny størrelse (10 + r.) Neste (bredde - 90), 10 + r. Neste (wheight - 90)));
var Col = Farge. FraArgb (r. Neste (255), r. Neste (255), r. Neste (255));
var CircCol = Farge. FraArgb (r. Neste (255), r. Neste (255), r. Neste (255));
kort radius = (kort) (10 + r. Neste (wheight - 90));
var Circ = new Circle (nytt punkt (r. Neste (bredde-100), r. Neste (wheight-100)), radius);
Skjerm. Fyll (rekt, kol);
Circ. Tegn (skjerm, CircCol, falsk, sann);
Skjerm. Oppdater() ;
Video. WindowCaption = Hendelser. Fps. ToString ();
}
}
}

Video gir metoder for å stille inn videomodus, lage videooverflater, skjule og vise musemarkøren og samhandle med OpenGL. Ikke at vi skal gjøre OpenGL en stund.

Her brukes videoobjektet til å angi størrelse og oppløsning på spillvinduet (fullskjerm er et alternativ). Parametrene for SetVideoMode lar deg endre disse og 13 overbelastninger gir mye variasjon. Det er en .chm-fil (Windows html hjelpeformat) i doc-mappen som dokumenterer alle klassene og medlemmene.

Hendelser-objektet har en Avslutt hendelsesbehandler som lar deg legge til nedloggingslogikk, og du bør ringe Hendelser. Avslutt applikasjonen () for å få den til å svare på brukeren som avslutter applikasjonen. Arrangementene. Tick ​​er muligens den viktigste hendelseshåndtereren. Den kaller den spesifiserte hendelseshåndtereren hver ramme. Dette er modellen for all SDL.NET-utvikling.

Du kan angi ønsket bildefrekvens og min redusere loopen til 5 og endre Targetfps til 150, og vi fikk den til å gå med 164 bilder per sekund. TargetFps er en ballpark-figur; det gir forsinkelser for å komme deg nær dette tallet, men hendelsene. Fps er det som leveres.

Som den opprinnelige versjonen av SDL, bruker ikke SDL.NET overflater for gjengivelse på skjermen. En overflate kan konstrueres fra en grafikkfil. Det er et stort antall egenskaper og metoder som gjør det mulig å lese eller skrive piksler i tillegg tegne grafiske primitiver, blitne andre overflater, til og med dumpe en overflate til en diskfil for å ta skjermbilder.

instagram story viewer