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 till salu 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 slutat men bara ser ut som det har.
Om du inte känner C # måste du först lära dig hur du programmerar 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 när vi tittar på sourceforge (igen!) Har det 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.
Vad exakt är SDL.NET?
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:
Det finns flera saker du måste göra för att få den att konfigureras. Här är de:
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 efter att ha hittat dll-skivorna.
SDL.NET använder SDL-uppsättningen av dlls och installerar dem under lib-mappen. Ta inte bort dem!
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ässigt stora och belägna 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 att visa ramarna per sekund i fönstret med hjälp av Video.WindowCaption. Varje ram ritar 17 fyllda cirklar och rektanglar, 17 x 2 x 50 = 1 700. Denna siffra beror på grafikkort, CPU etc. Det är en imponerande hastighet.
// Av David Bolton, http://cplus.about.com
använder System;
använder System.Drawing;
med hjälp av SdlDotNet.Graphics;
med hjälp av SdlDotNet.Core;
med användning av SdlDotNet.Graphics.Primitives;
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);
Händelser.TargetFps = 50;
Event.Quit + = (QuitEventHandler);
Händelser.Tick + = (TickEventHandler);
Händelser.Kör ();
privata statiska tomrum QuitEventHandler (avsändare av objekt, QuitEventArgs args)
Händelser.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.Next (wwidth-100), r.Next (wheight-100)),
ny storlek (10 + r.Nästa (bredd - 90), 10 + r.Nästa (vikt - 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));
kort radie = (kort) (10 + r.Nästa (vikt - 90));
var Circ = new Circle (new Point (r.Next (wwidth-100), r.Next (wheight-100)), radius);
Skärm. Fyll (rekt, kol);
Circ.Draw (Screen, CircCol, false, true);
Skärm. Uppdatera ();
Video.WindowCaption = Events.Fps.ToString ();
SDL.NET är mycket objektorienterat och det finns två fördefinierade objekt som används i varje SDL.NET-applikation.
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.
Klassen Händelser innehåller händelser som kan kopplas till för att läsa användarinmatning och andra diverse händelser.
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 Events.QuitApplication () för att få det 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 ger förseningar 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, sprida andra ytor, till och med dumpa en yta till en diskfil för att ta skärmdumpar.
SDL> NET erbjuder nästan allt för att du ska kunna skapa spel. Vi kommer att titta på de olika funktionerna under de närmaste några tutorials och sedan gå över till att skapa spel med det.