Programmieren von Spielen in C # mit SDL.NET

Eines der Probleme mit Open Source ist, dass Projekte manchmal auf der Strecke bleiben oder verwirrende Wendungen nehmen. Nehmen Sie SDL.NET. Wenn Sie die zum Verkauf stehende Website ignorieren, wird eine Suche im Web angezeigt cs-sdl.sourceforge.net Ein Projekt, das anscheinend im November 2010 eingestellt wurde. Wir glauben nicht, dass es aufgehört hat, aber es sieht einfach so aus.

Wenn Sie C # nicht kennen, müssen Sie zuerst lernen, wie es geht Programm in C #. An anderer Stelle stießen wir auf das auf der Mono-Website verlinkte Tao-Framework, das denselben Bereich abzudecken scheint und Unterstützung für Sound usw. hinzufügt. Aber wenn man (wieder!) Auf Sourceforge schaut, wurde es von abgelöst OpenTK aber der Fokus dort ist OpenGL. Es enthält jedoch auch OpenAL, sodass die Installation der beiden (cs-sdl und OpenTK) der richtige Weg zu sein schien.

Ein Teil der OpenTk-Installation ist fehlgeschlagen. der NS (Shader), weil wir VS 2008 nicht installiert haben! Der Rest war jedoch in Ordnung. Wir haben ein C # -Konsolenprojekt erstellt und mit SDL.NET begonnen. Die Online-Dokumentation finden Sie hier.

instagram viewer

Rückblickend können wir sehen, dass das OpenTK-Framework als solches nicht benötigt wurde, dass SDL.NET alles installiert hat, aber das war zu diesem Zeitpunkt nicht klar. Es verwendet weiterhin das Tao Framework, obwohl die Entwicklung von OpenTK abgelöst wurde. Es ist etwas verwirrend und wir hoffen, dass das SDL.NET-Team in Zukunft eine OpenTk-kompatible Version herausbringen wird.

Es ist nicht, wie wir dachten, nur ein dünner Wrapper für SDL, sondern bietet eine beträchtliche zusätzliche Funktionalität. Es gibt eine Reihe von Klassen, die Folgendes bieten:

Suchen Sie die beiden SDL.NET-DLLs (SdlDotNet.dll und Tao). Sdl.dll) sowie die OpenTK-DLLs und fügen Sie sie den Projektreferenzen hinzu. Nach der Installation befinden sich die DLLs unter Programme \ SdlDotNet \ bin (unter 32-Bit-Windows und Programme (x86) \ SdlDotNet \ bin unter 64-Bit-Windows). Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Abschnitt Verweise, klicken Sie dann auf Verweis hinzufügen und wählen Sie die Registerkarte Durchsuchen. Das öffnet einen Explorer-Dialog und nach dem Auffinden der DLLs wählen Sie dann und klicken Sie auf OK.

Als letztes klicken Sie auf Ansicht \ Eigenschaften, um die Eigenschaftenseiten zu öffnen und auf der ersten Registerkarte (Anwendung) den Ausgabetyp von Konsolenanwendung in Windows-Anwendung zu ändern. Wenn Sie dies nicht tun, wenn das Programm zum ersten Mal ausgeführt wird und das SDL-Hauptfenster öffnet, wird auch ein Konsolenfenster geöffnet.

Wir sind jetzt bereit zu starten und ich habe unten eine kurze Anwendung erstellt. Dadurch werden zufällig große und lokalisierte Rechtecke und Kreise auf der Fensteroberfläche mit 1.700 pro Sekunde und einer Bildrate von 50 Bildern pro Sekunde gezeichnet.

Diese 1.700 ergeben sich aus der Einstellung der pro Bild gezeichneten Zahl auf 17 und der Anzeige der Bilder pro Sekunde in der Fensterbeschriftung mithilfe von Video. WindowCaption. Jeder Rahmen zeichnet 17 gefüllte Kreise und Rechtecke, 17 x 2 x 50 = 1.700. Diese Zahl hängt von der Grafikkarte, der CPU usw. ab. Es ist eine beeindruckende Geschwindigkeit.

// Von David Bolton, http://cplus.about.com
using System;
mit System. Zeichnung;
mit SdlDotNet. Grafik;
mit SdlDotNet. Ader;
mit SdlDotNet. Grafik. Primitive;
öffentliche Klasse ex1
{
private const int wwidth = 1024;
private const int wheight = 768;
privater statischer Oberflächenbildschirm;
private static Random r = new Random ();
public static void Main (string [] args)
{
Bildschirm = Video. SetVideoMode (wwidth, wheight, 32, false, false, false, true);
Veranstaltungen. TargetFps = 50;
Veranstaltungen. Quit + = (QuitEventHandler);
Veranstaltungen. Tick ​​+ = (TickEventHandler);
Veranstaltungen. Lauf() ;
}
private static void QuitEventHandler (Objektabsender, QuitEventArgs-Argumente)
{
Veranstaltungen. QuitApplication ();
}
private static void TickEventHandler (Objektabsender, TickEventArgs-Argumente)
{
für (var i = 0; i <17; i ++)
{
var rect = neues Rechteck (neuer Punkt (r. Weiter (wwidth-100), r. Weiter (Wheight-100)),
neue Größe (10 + r. Weiter (wwidth - 90), 10 + r. Weiter (Wheight - 90)));
var Col = Farbe. FromArgb (r. Weiter (255), r. Weiter (255), r. Weiter (255));
var CircCol = Farbe. FromArgb (r. Weiter (255), r. Weiter (255), r. Weiter (255));
kurzer Radius = (kurz) (10 + r. Weiter (Wheight - 90));
var Circ = neuer Kreis (neuer Punkt (r. Weiter (wwidth-100), r. Weiter (Wheight-100)), Radius);
Bildschirm. Füllen (rect, Col);
Circ. Zeichnen (Screen, CircCol, false, true);
Bildschirm. Update ();
Video. WindowCaption = Ereignisse. Fps. ToString ();
}
}
}

Video bietet Methoden zum Einstellen des Videomodus, zum Erstellen von Videooberflächen, zum Ausblenden und Anzeigen des Mauszeigers sowie zur Interaktion mit OpenGL. Nicht, dass wir für eine Weile OpenGL machen würden.

Hier wird das Videoobjekt verwendet, um die Größe und Auflösung des Spielfensters festzulegen (Vollbild ist eine Option). Mit den Parametern für SetVideoMode können Sie diese ändern, und 13 Überladungen bieten viel Abwechslung. Im doc-Ordner befindet sich eine .chm-Datei (Windows-HTML-Hilfeformat), in der alle Klassen und Mitglieder dokumentiert sind.

Das Ereignisobjekt verfügt über einen Ereignishandler zum Beenden von Ereignissen, mit dem Sie eine Logik zum Schließen hinzufügen können, und Sie sollten Ereignisse aufrufen. QuitApplication (), damit es auf den Benutzer reagiert, der die Anwendung schließt. Die Ereignisse. Tick ​​ist möglicherweise der wichtigste Event-Handler. Es ruft den angegebenen Ereignishandler für jeden Frame auf. Dies ist das Modell für die gesamte SDL.NET-Entwicklung.

Sie können Ihre gewünschte Bildrate einstellen und die Schleife auf 5 reduzieren und die Targetfps auf 150 ändern. Wir haben sie mit 164 Bildern pro Sekunde ausgeführt. TargetFps ist eine Baseballfigur; Es kommt zu Verzögerungen, um Sie in die Nähe dieser Zahl zu bringen, aber der Ereignisse. Fps wird geliefert.

Wie die ursprüngliche Nicht-Windows-Version von SDL verwendet SDL.NET Oberflächen zum Rendern auf dem Bildschirm. Eine Oberfläche kann aus einer Grafikdatei erstellt werden. Es gibt eine Vielzahl von Eigenschaften und Methoden, die das Lesen oder Schreiben von Pixeln sowie ermöglichen Zeichnen Sie die Grafikprimitive, blenden Sie andere Oberflächen aus und speichern Sie eine Oberfläche sogar in einer Datenträgerdatei, um sie aufzunehmen Screenshots.