Programmation de jeux en C # à l'aide de SDL.NET

L'un des problèmes de l'open source est que les projets semblent parfois tomber à la trappe ou prendre des virages déroutants. Prenez SDL.NET. Ignorant le site Web à vendre, une recherche sur le Web révèle cs-sdl.sourceforge.net un projet qui semble s'être arrêté en novembre 2010. Nous ne pensons pas que cela s'est arrêté, mais on dirait juste que c'est le cas.

Si vous ne connaissez pas C #, vous devrez d'abord apprendre à programme en C #. En regardant ailleurs, nous sommes tombés sur le cadre Tao lié sur le site Web Mono qui semble couvrir le même domaine et ajouter un support pour le son, etc. Mais en regardant sur sourceforge (encore!), Il a été remplacé par OpenTK mais l'accent est mis sur OpenGL. Cependant, il inclut également OpenAL, donc l'installation des deux (cs-sdl et OpenTK) semblait être la voie à suivre.

Une partie de l'installation d'OpenTk a échoué; le NS (shader) car nous n'avons pas installé VS 2008! Cependant, le reste était ok. Nous avons créé un projet de console C # et commencé à jouer avec SDL.NET. La documentation en ligne se trouve ici.

instagram viewer

Avec le recul, nous pouvons voir que le framework OpenTK n'était pas nécessaire en tant que tel, que SDL.NET a tout installé mais ce n'était pas clair à l'époque. Il utilise toujours Tao Framework même si son développement a été remplacé par OpenTK. C'est un peu déroutant et nous espérons que l'équipe SDL.NET sortira une version compatible OpenTk à l'avenir.

Il ne s'agit pas, comme nous le pensions, d'un simple wrapper fin SDL, mais il ajoute des fonctionnalités supplémentaires considérables. Il existe un certain nombre de classes pour fournir les éléments suivants:

Recherchez les deux DLL SDL.NET (SdlDotNet.dll et Tao. Sdl.dll) ainsi que les DLL OpenTK et ajoutez-les aux références du projet. Après l'installation, les DLL sont situées dans Program Files \ SdlDotNet \ bin (sous Windows 32 bits et Program Files (x86) \ SdlDotNet \ bin sous Windows 64 bits). Cliquez avec le bouton droit sur la section Références dans l'Explorateur de solutions, puis cliquez sur Ajouter une référence et sélectionnez l'onglet Parcourir. Cela ouvre une boîte de dialogue de l'Explorateur et après avoir localisé les DLL, sélectionnez puis cliquez sur OK.

Une dernière chose, cliquez sur View \ Properties pour ouvrir les pages de propriétés et sur le premier onglet (Application) Changer le type de sortie de l'application console à l'application Windows. Si vous ne le faites pas lorsque le programme s'exécute pour la première fois et ouvre la fenêtre principale SDL, il ouvrira également une fenêtre de console.

Nous sommes maintenant prêts à commencer et j'ai créé une courte application ci-dessous. Cela bloque des rectangles et des cercles de taille aléatoire et situés sur la surface de la fenêtre à 1 700 tracés par seconde à une fréquence d'images de 50 images par seconde.

Ces 1700 proviennent de la définition du nombre dessiné par image à 17 et de l'affichage des images par seconde dans la légende de la fenêtre à l'aide de la vidéo. WindowCaption. Chaque cadre dessine 17 cercles et rectangles remplis, 17 x 2 x 50 = 1 700. Ce chiffre dépend de la carte vidéo, du processeur, etc. C'est une vitesse impressionnante.

// Par David Bolton, http://cplus.about.com
en utilisant le système;
en utilisant le système. Dessin;
en utilisant SdlDotNet. Graphique;
en utilisant SdlDotNet. Coeur;
en utilisant SdlDotNet. Graphique. Primitives;
classe publique ex1
{
const int wwidth privé = 1024;
const int wheight = 768;
Écran de surface statique privé;
Random statique privé r = nouveau Random ();
public static void Main (chaîne [] arguments)
{
Écran = vidéo. SetVideoMode (wwidth, wheight, 32, false, false, false, true);
Événements. TargetFps = 50;
Événements. Quitter + = (QuitEventHandler);
Événements. Cochez + = (TickEventHandler);
Événements. Courir() ;
}
vide statique privé QuitEventHandler (expéditeur d'objet, arguments QuitEventArgs)
{
Événements. QuitApplication ();
}
vide statique statique TickEventHandler (expéditeur d'objet, arguments TickEventArgs)
{
pour (var i = 0; i <17; i ++)
{
var rect = nouveau Rectangle (nouveau Point (r. Ensuite (wwidth- 100), r. Suivant (wheight-100)),
nouvelle taille (10 + r. Suivant (wwidth - 90), 10 + r. Suivant (poids - 90)));
var Col = Couleur. FromArgb (r. Suivant (255), r. Suivant (255), r. Suivant (255));
var CircCol = Couleur. FromArgb (r. Suivant (255), r. Suivant (255), r. Suivant (255));
rayon court = (court) (10 + r. Suivant (poids - 90));
var Circ = nouveau cercle (nouveau point (r. Ensuite (wwidth- 100), r. Suivant (wheight-100)), radius);
Écran. Remplissez (rect, Col);
Circ. Draw (Screen, CircCol, false, true);
Écran. Mise à jour() ;
Vidéo. WindowCaption = Evénements. Fps. ToString ();
}
}
}

La vidéo fournit des méthodes pour définir le mode vidéo, créer des surfaces vidéo, masquer et afficher le curseur de la souris et interagir avec OpenGL. Non pas que nous allons faire OpenGL pendant un certain temps.

Ici, l'objet vidéo est utilisé pour définir la taille et la résolution de la fenêtre de jeu (le plein écran est une option). Les paramètres de SetVideoMode vous permettent de les modifier et 13 surcharges offrent une grande variété. Il y a un fichier .chm (format d'aide html Windows) dans le dossier doc documentant toutes les classes et les membres.

L'objet Events possède un gestionnaire d'événements Quit qui vous permet d'ajouter une logique de fermeture et vous devez appeler Events. QuitApplication () pour le faire répondre à l'utilisateur fermant l'application. Les événements. Tick ​​est probablement le gestionnaire d'événements le plus important. Il appelle le gestionnaire d'événements spécifié à chaque image. Il s'agit du modèle pour tout développement SDL.NET.

Vous pouvez définir la fréquence d'images souhaitée et ma réduction de la boucle à 5 et la modification du Targetfps à 150, nous l'avons fait fonctionner à 164 images par seconde. TargetFps est une figure approximative; il met des retards pour vous rapprocher de ce chiffre mais des événements. Fps est ce qui est livré.

Comme la version originale non fenêtrée de SDL, le SDL.NET utilise des surfaces pour le rendu à l'écran. Une surface peut être construite à partir d'un fichier graphique. Il existe un grand nombre de propriétés et de méthodes qui permettent de lire ou d'écrire des pixels ainsi que dessinez les primitives graphiques, blit d'autres surfaces, même vider une surface dans un fichier disque pour prendre captures d'écran.