Programmera spel i C # med SDL.NET

Ett av problemen med öppen källkod är att projekt ibland verkar falla vid vägen eller ta förvirrande vändningar. Ta SDL.NET. Genom att ignorera webbplatsen för försäljning visar en sökning på webben cs-sdl.sourceforge.net ett projekt som verkar ha slutat i november 2010. Vi tror inte att det har stannat utan bara ser ut som det har gjort.

Om du inte känner C # måste du först lära dig hur du gör det program i C #. När vi tittade någon annanstans kom vi över Tao-ramverket som är länkat på Mono-webbplatsen som verkar täcka samma område och lägga till stöd för ljud etc. Men tittar på sourceforge (igen!) Har den ersatts av OpenTK men fokuset där är OpenGL. Men det inkluderar också OpenAL så att installationen av de två (cs-sdl och OpenTK) tycktes vara vägen framåt.

En del av OpenTk-installationen misslyckades; NS (shader) eftersom vi inte har VS 2008 installerat! Resten av det var dock ok. Vi skapade ett C # Console-projekt och började spela med SDL.NET. Online-dokumentationen kan hittas här.

När vi ser tillbaka kan vi se att OpenTK-ramverket inte behövdes som sådan, att SDL.NET installerade allt men det var inte tydligt då. Den använder fortfarande Tao-ramverket trots att utvecklingen av detta har ersatts av OpenTK. Det är lite förvirrande och vi hoppas att SDL.NET-teamet kommer att ta fram en OpenTk-kompatibel version i framtiden.

instagram viewer

Det är, som vi trodde, inte bara en tunn inpackning runt SDL, utan tillför betydande extra funktionalitet. Det finns ett antal klasser som tillhandahåller följande:

Leta reda på de två SDL.NET-dllarna (SdlDotNet.dll och Tao. Sdl.dll) såväl som OpenTK-dllarna och lägg till dem i projektreferenser. Efter installationen finns dllarna i Program Files \ SdlDotNet \ bin (på en 32 bitars Windows och Program Files (x86) \ SdlDotNet \ bin på 64 bitars Windows. Högerklicka på avsnittet Referenser i Solution Explorer, klicka sedan på Lägg till referens och välj fliken Bläddra. Det öppnar en Explorer-dialogruta och välj sedan och klicka på ok när du har hittat dll-skivorna.

En sista sak, klicka på Visa \ Egenskaper så att det öppnas Egenskapssidorna och på den första fliken (Program) Ändra utdatatyp från Console Application till Windows Application. Om du inte gör detta när programmet först körs och öppnar SDL-huvudfönstret öppnas också ett konsolfönster.

Vi är nu redo att starta och jag har skapat en kort applikation nedan. Detta smälter slumpmässiga storlekar och placerade rektanglar och cirklar på fönsterytan med 1 700 dragna per sekund med en bildhastighet på 50 bilder per sekund.

Det 1 700 kommer från att ställa in antalet som dras per ram till 17 och visa ramarna per sekund i fönstret med bild. WindowCaption. Varje ram ritar 17 fyllda cirklar och rektanglar, 17 x 2 x 50 = 1 700. Denna siffra beror på videokortet, CPU etc. Det är en imponerande hastighet.

// Av David Bolton, http://cplus.about.com
använder System;
använder System. Teckning;
med SdlDotNet. Grafik;
med SdlDotNet. Kärna;
med SdlDotNet. Grafik. primitiver;
allmän klass ex1
{
privat konst int bredd = 1024;
privat konst int vikt = 768;
privat statisk ytskärm;
privat statisk slumpmässig r = ny slumpmässig ();
public static void Main (string [] args)
{
Skärm = video. SetVideoMode (bredd, höjd, 32, falsk, falsk, falsk, sann);
Evenemang. TargetFps = 50;
Evenemang. Avsluta + = (QuitEventHandler);
Evenemang. Tick ​​+ = (TickEventHandler);
Evenemang. Springa() ;
}
privata statiska tomrum QuitEventHandler (avsändare av objekt, QuitEventArgs args)
{
Evenemang. QuitApplication ();
}
privat statisk ogiltig TickEventHandler (avsändare av objekt, TickEventArgs args)
{
för (var i = 0; i <17; i ++)
{
var rect = new Rectangle (new Point (r. Nästa (bredd-100), r. Nästa (wheight-100)),
ny storlek (10 + r. Nästa (bredd - 90), 10 + r. Nästa (wheight - 90)));
var Col = Färg. Från Argb (r. Nästa (255), r. Nästa (255), r. Nästa (255));
var CircCol = Färg. Från Argb (r. Nästa (255), r. Nästa (255), r. Nästa (255));
kort radie = (kort) (10 + r. Nästa (wheight - 90));
var Circ = new Circle (new Point (r. Nästa (bredd-100), r. Nästa (wheight-100)), radie);
Skärm. Fyll (rekt, kol);
Circ. Rita (Screen, CircCol, false, true);
Skärm. Uppdatering() ;
Video. WindowCaption = Händelser. FPS. Att stränga() ;
}
}
}

Video tillhandahåller metoder för att ställa in videoläge, skapa videoytor, dölja och visa muspekaren och interagera med OpenGL. Inte för att vi ska göra OpenGL ett tag.

Här används videoobjektet för att ställa in storlek och upplösning på spelfönstret (helskärm är ett alternativ). Parametrarna för SetVideoMode låter dig ändra dessa och 13 överbelastningar ger massor av variation. Det finns en .chm-fil (Windows html-hjälpformat) i mappen doc som dokumenterar alla klasser och medlemmar.

Händelserobjektet har en Quit events-hanterare som låter dig lägga till närliggande logik och du bör ringa händelser. Avsluta ansökan () för att få den att svara på användaren som stänger applikationen. Händelserna. Tick ​​är kanske den viktigaste evenemangshanteraren. Det kallar den angivna händelseshanteraren varje ram. Detta är modellen för all SDL.NET-utveckling.

Du kan ställa in önskad bildfrekvens och min minska slingan till 5 och ändra Targetfps till 150 vi fick det att köra med 164 bilder per sekund. TargetFps är en siffra för bollplatser; det försenar för att komma dig nära den siffran men händelserna. Fps är vad som levereras.

Precis som den ursprungliga versionen av SDL. SDL.NET, använder SDL.NET ytor för återgivning till skärmen. En yta kan konstrueras från en grafikfil. Det finns ett stort antal egenskaper och metoder som gör det möjligt att läsa eller skriva pixlar samt rita de grafiska primitiven, spruta andra ytor, tom dumpa en yta till en diskfil för att ta skärmbilder.

instagram story viewer