Games programmeren in C # met behulp van SDL.NET Tutorial One

Een van de problemen met open source is dat projecten soms uit de boot vallen of verwarrende wendingen nemen. Neem SDL.NET. De website te koop negerend, onthult een zoekopdracht op het web cs-sdl.sourceforge.net een project dat in november 2010 lijkt te zijn gestopt. We denken niet dat het is gestopt, maar dat het er gewoon uitziet.

Als u C # niet kent, moet u eerst leren programmeren in C #. Als we ergens anders kijken, kwamen we het Tao-raamwerk tegen op de Mono-website dat hetzelfde gebied lijkt te bestrijken en ondersteuning voor geluid enz. Toevoegt. Maar kijkend naar sourceforge (alweer!), Is het vervangen door OpenTK, maar de focus ligt op OpenGL. Het bevat echter ook OpenAL, dus het installeren van de twee (cs-sdl en OpenTK) leek de weg vooruit.

Een deel van de OpenTk-installatie is mislukt; de NS (shader) omdat VS 2008 niet is geïnstalleerd! De rest was echter goed. We hebben een C # Console-project gemaakt en zijn begonnen met spelen met SDL.NET. De online documentatie is hier te vinden.

Terugkijkend kunnen we zien dat het OpenTK-framework als zodanig niet nodig was, dat SDL.NET alles installeerde, maar dat was destijds niet duidelijk. Het gebruikt nog steeds het Tao Framework, hoewel de ontwikkeling daarvan is vervangen door OpenTK. Het is een beetje verwarrend en we hopen dat het SDL.NET-team in de toekomst een met OpenTk compatibele versie zal uitbrengen.

Wat is SDL.NET precies??

Het is niet, zoals we dachten, slechts een dunne wikkel rond SDL, maar voegt aanzienlijke extra functionaliteit toe. Er zijn een aantal klassen die het volgende bieden:

  • timers
  • Biedt Sprites, inclusief animatie en tekst
  • Biedt oppervlakken voor 2D en OpenGl
  • Biedt ondersteuning voor het laden en afspelen van films
  • Biedt ondersteuning voor audio
  • Biedt Bezier, polygoon (en texturen), vierkant, cirkel, lijn, taarttekening
  • Biedt deeltjesondersteuning bij emitters en sprites en manipulators.
  • Biedt interface met Windows-formulieren via een gedeelde PictureBox met oppervlak.

Voorbereidende werkzaamheden

Er zijn verschillende dingen die u moet doen om het te installeren. Daar zijn ze:

Zoek de twee SDL.NET-dll's (SdlDotNet.dll en Tao.Sdl.dll) en de OpenTK-dll's en voeg ze toe aan de projectverwijzingen. Na de installatie bevinden de dll's zich in Program Files \ SdlDotNet \ bin (op een 32-bits Windows en Program Files (x86) \ SdlDotNet \ bin op 64-bits Windows. Klik met de rechtermuisknop op de sectie Referenties in Solution Explorer en klik vervolgens op Referentie toevoegen en selecteer het tabblad Bladeren. Hiermee wordt een Verkenner-dialoogvenster geopend en nadat u de DLL's hebt gevonden, selecteert u en klikt u op OK.

SDL.NET gebruikt de SDL-set van dll's en installeert deze onder de map lib. Verwijder ze niet!

Nog een laatste ding, klik op Beeld \ Eigenschappen zodat het de eigenschappenpagina's opent en op het eerste tabblad (Toepassing) Uitvoertype wijzigen van Console-toepassing naar Windows-toepassing. Als u dit niet doet wanneer het programma voor het eerst wordt uitgevoerd en het SDL-hoofdvenster wordt geopend, wordt ook een consolevenster geopend.

We zijn nu klaar om te beginnen en ik heb hieronder een korte applicatie gemaakt. Dit blits willekeurig geplaatste en geplaatste rechthoeken en cirkels op het vensteroppervlak met 1.700 getekend per seconde met een framesnelheid van 50 frames per seconde.

Die 1.700 komt van het instellen van het getekende aantal per frame op 17 en het weergeven van de frames per seconde in het bijschrift van het venster met behulp van Video.WindowCaption. Elk frame tekent 17 gevulde cirkels en rechthoeken, 17 x 2 x 50 = 1.700. Dit cijfer is afhankelijk van de videokaart, CPU enz. Het is een indrukwekkende snelheid.

// Door David Bolton, http://cplus.about.com
het gebruik van systeem;
met behulp van System.Drawing;
met behulp van SdlDotNet.Graphics;
met behulp van SdlDotNet.Core;
met behulp van SdlDotNet.Graphics.Primitives;
openbare klasse ex1

private const int wwidth = 1024;
privé const int wheight = 768;
statisch privé-oppervlaktescherm;
privé statisch Random r = new Random ();
public static void Main (string [] args)

Screen = Video.SetVideoMode (breedte, wheight, 32, false, false, false, true);
Events.TargetFps = 50;
Events.Quit + = (QuitEventHandler);
Events.Tick + = (TickEventHandler);
Events.Run ();

private statische void QuitEventHandler (objectafzender, QuitEventArgs args)

Events.QuitApplication ();

privé statische nietig TickEventHandler (objectafzender, TickEventArgs args)

voor (var i = 0; i < 17; i++)

var rect = new Rectangle (nieuw punt (r.Next (breedte 100), r.Next (wheight-100)),
nieuwe grootte (10 + r.Next (breedte - 90), 10 + r.Next (wheight - 90)));
var Col = Color.FromArgb (r.Next (255), r.Next (255), r.Next (255));
var CircCol = Color.FromArgb (r.Next (255), r.Next (255), r.Next (255));
korte straal = (kort) (10 + r.Volgende (wheight - 90));
var Circ = nieuwe cirkel (nieuw punt (r.Next (breedte 100), r.Next (wheight-100)), straal);
Screen.Fill (rect, Col);
Circ.Draw (Screen, CircCol, false, true);
Screen.Update ();
Video.WindowCaption = Events.Fps.ToString ();


Objectgeoriënteerde ontwikkeling

SDL.NET is erg objectgericht en er zijn twee vooraf gedefinieerde objecten die in elke SDL.NET-toepassing worden gebruikt.

Video biedt methoden om de videomodus in te stellen, video-oppervlakken te maken, de muiscursor te verbergen en te tonen en te communiceren met OpenGL. Niet dat we nog een tijdje OpenGL zullen doen.

De klasse Gebeurtenissen bevat gebeurtenissen waaraan gebruikersinvoer en andere diverse gebeurtenissen kunnen worden gekoppeld.

Hier wordt het Video-object gebruikt om de grootte en resolutie van het spelvenster in te stellen (volledig scherm is een optie). Met de parameters voor SetVideoMode kunt u deze wijzigen en 13 overbelastingen bieden veel afwisseling. Er is een .chm-bestand (Windows html help-formaat) in de doc-map waarin alle klassen en leden worden gedocumenteerd.

Het Events-object heeft een Quit-eventshandler waarmee u afsluitlogica kunt toevoegen en u moet Events.QuitApplication () aanroepen om te reageren op de gebruiker die de toepassing sluit. De Events.Tick is mogelijk de belangrijkste gebeurtenishandler. Het roept de opgegeven gebeurtenishandler elk frame aan. Dit is het model voor alle SDL.NET-ontwikkeling.

Je kunt de gewenste framesnelheid instellen en de lus terugbrengen tot 5 en de Targetfps veranderen in 150, we hebben het met 164 frames per seconde. TargetFps is een ballpark figuur; het levert vertragingen op om je bij dat cijfer te krijgen, maar de Events.Fps is wat wordt geleverd.

oppervlakken

Net als de originele niet-Windows-versie van SDL, gebruikt SDL.NET oppervlakken voor weergave op het scherm. Een oppervlak kan worden opgebouwd uit een grafisch bestand. Er zijn een groot aantal eigenschappen en methoden die het mogelijk maken om pixels te lezen of te schrijven en om de grafische primitieven te tekenen, andere oppervlakken te blitsen, of zelfs een oppervlak naar een schijfbestand te dumpen om screenshots te maken.

SDL> NET biedt zo ongeveer alles waarmee je games kunt maken. We zullen de verschillende functies de komende paar tutorials bekijken en er vervolgens games mee maken.