C Sharp Création d'un projet SDL.NET avec Visual Studio 2005
Un article de Blu3dr4g0n.
[modifier] Introduction
Ce tutoriel va vous montrer comment utiliser la librairie SDL.NET avec Microsoft Visual Studio 2005, utiliser le bindings et visualiser un exemple.
Nous aurons besoins des outils suivants :
- Visual C# Express 2005 (IDE gratuit)
- SdlDotNet-6.0.0
- Des notions exposées à la page d'introduction à .NET
[modifier] Préparation
Décompilez l'archive sdldotnet-6.0.0.zip dans un répertoire. Dans le répertoire qui vient d’être généré, vous devriez disposer des éléments suivants :
Signification des répertoires les plus importants
- bin: Assemblies et dépendances pour Opengl TAO
- doc: la documentation du projet avec les tutoriaux
- examples: les sources des exemples
- lib: les DLL originelles utilisées par le bindings
Pour une description plus complète, n’hésitez pas à consulter le fichier ‘README’
[modifier] Création d’un projet dans Visual C# Express
Maintenant que nous disposons de la librairie SDL.NET, nous allons créer un projet de toute pièce.
Ouvrez Visual C# Express, puis créez un nouveau projet
Puis sélectionnez le templates EmptyProject. Vous lui donnerez le nom de TestSDLNET. Cochez l’option de création de répertoire pour la solution et validez.
Une fois votre plan de travail présent dans Visual C#, visualisez le solution explorer : vous ne disposez de pas grand-chose pour l’instant, ce qui est tout à fait normal, puisqu’il s’agit d’un template initialisant uniquement un espace de travail minimal.
Nous allons maintenant spécifier que notre application est du type application windows, et donc pour cela, nous allons paramétrer notre projet. Faites un click droit sur le nom du projet et sélectionnez properties.
Maintenant que le panneau de propriétés de notre projet est affiché, nous allons l’utiliser pour configurer quelques options :
- Section Application
- Output Type : Windows Application
- Section Build
- General : cocher la case Optimize Code
- Output : cocher la case XML documentation file
- Section Application Settings
- Cliquez sur 'générer un paramètrage pour l’application'
Validez les paramètres en enregistrant le projet. Quelques explications sur ces paramètres et leurs raisons… Comme expliqué précédemment, nous spécifions que notre application est destinée à être une Application Windows, et non une Application Console, ce qui nous permettra d’utiliser directement le mode fenêtrage pour notre application sans avoir une console qui reste ouverte juste derrière. Le XML documentation file permet de générer une documentation au format XML de notre projet si vous avez utilisez les balises adéquates dans le code source de votre projet. Les application settings permettent de créer des variables pour l’application, qui seront modifiables à tout moment lors du développement ou lors de l’exécution du programme (par exemple, le répertoire des images, des données utilisateurs, etc…).
Nous allons maintenant ajouter un fichier source à notre application, pour se faire, faites toujours un click droit sur le nom de votre projet et selectionnez add->New Item et vous choisissez le template code file que vous nommerez main.cs
Dans ce fichier, nous allons coller le code de l’exemple examples\ParticleEngine
using System; using System.Drawing; using System.Collections.Generic; using SdlDotNet; using SdlDotNet.Graphics.Primitives; using SdlDotNet.Input; using SdlDotNet.Graphics; namespace SdlDotNet.Examples { /// <summary> /// ParticleEngine est un petit programme qui crée /// un champ d'étoiles filantes sur l'écran grâce à SDL.Net /// </summary> class ParticleEngine { /// <summary> /// Constructeur, initialise les étoiles /// </summary> public ParticleEngine() { _size = new Size(800, 600); _rand = new Random(System.DateTime.Now.Millisecond); _num = 50; this.InitializeStars(); } private List<Particle> _particles = new List<Particle>(); private bool _quitFlag; private Size _size; private Random _rand; private int _num; #region Classe Particle class Particle { private Point _position; // position de la particule private int _velocity; // valeur de vitesse private Point _direction; // direction private Color _color; // couleur de la particule public Particle(Point position, int velocity, Point direction, Color color) { _color = color; _direction = direction; _velocity = velocity; _position = position; } // Accesseurs public Point Position { get {return _position;} set {_position = value;} } public Point Direction { get {return _direction;} set {_direction = value;} } public int Velocity { get {return _velocity;} set {_velocity = value;} } public Color Color { get {return _color;} set {_color = value;} } // Une particule est affichée sous forme de "Box" public Box Star { get { return new Box( (short)_position.X, (short)_position.Y, (short)(_position.X + 2), (short)(_position.Y + 2)); } } } #endregion /// <summary> /// Initialisation des étoiles /// </summary> private void InitializeStars() { // Variables temporaires Particle particle; int velocity; // Initialisation de toutes les étoiles for ( int i= 1; i < _num;i++) { // Vélocité aléatoire velocity = _rand.Next(1,5); // Particule placée aléatoirement // Couleur suivant la vitesse particle = new Particle( new Point(_rand.Next(1,_size.Width), _rand.Next(1,_size.Height)), velocity, new Point(-1, 0), Color.FromArgb(255, 51 * velocity, 51 * velocity)); _particles.Add(particle); } } /// <summary> /// On déplacee les particules /// </summary> /// <param name="particle"></param> private void MoveStars(Particle particle) { particle.Position = new Point(particle.Position.X + (particle.Direction.X * particle.Velocity), particle.Position.Y + (particle.Direction.Y * particle.Velocity)); // Une particule qui sort de l'écran // est recréée à l'autre bout if ((particle.Position.X <= 0) || (particle.Position.X >= _size.Width) || (particle.Position.Y <= 0)|| (particle.Position.Y >= _size.Height) ) { particle.Position = new Point(_size.Width, _rand.Next(1, _size.Height)); particle.Velocity = _rand.Next(1,5); particle.Direction = new Point(-1, 0); particle.Color = Color.FromArgb(255, 51 * particle.Velocity, 51 * particle.Velocity); } } /// <summary> /// Boucle principale /// </summary> public void Run() { Particle particle; // Initialisation de l'écran d'affichage Surface screen = Video.SetVideoMode(_size.Width, _size.Height); // Evénements clavier Core.Events.KeyboardDown += new EventHandler<KeyboardEventArgs>(this.KeyboardDown); // Fermeture de la fenêtre par la croix Core.Events.Quit += new EventHandler<Core.QuitEventArgs>(this.Quit); // On boucle tant que quitFlag est faux while (!_quitFlag) { while (Core.Events.Poll()) { // On vide la pile des événements } try { // Peint l'écran en noir screen.Fill(Color.FromArgb(0,0,0)); // On met à jour et on affiche les particules for (int i = 0; i < _particles.Count;i++) { particle = _particles[i]; MoveStars(particle); screen.Draw(particle.Star, particle.Color); } screen.Update(); } catch (SurfaceLostException e) { Console.WriteLine(e); } } } // Un appui sur Echap ou Q quitte le programme private void KeyboardDown(object sender, EventArgs e) { KeyboardEventArgs events = e as KeyboardEventArgs; if (events.Key == Key.Escape || events.Key == Key.Q) { _quitFlag = true; } } // La croix ferme le programme private void Quit(object sender, EventArgs e) { _quitFlag = true; } // Fonction Main [STAThread] public static void Main() { ParticleEngine particleEngine = new ParticleEngine(); particleEngine.Run(); } } }
Bien sûr, nous ne pouvons pas encore compiler l'exemple car il manque les assemblies pour le projet ! Pour cela, faîtes un click droit sur le nom de votre projet, puis selectionnez Add References. Rajoutez les assemblies suivant :
- Onglet .NET
- System
- System.Drawing
- Onglet Browse
- SdlDotNet.dll situé dans le répertoire sdldotnet-6.0.0\bin\assemblies que vous avez décompressé plus tôt.
Une fois ceci fait, si vous lancez l'application, vous devriez avoir une fenêtre d'exeption qui va s'ouvrir, comme celle çi-dessous :
Ceci provient du fait que le code MSIL généré par le compilateur ne trouve pas les DLL originelles de SDL utilisées par le bindings. Vous réglerez le problème en copiant les DLL du répertoire sdldotnet-6.0.0\bin\win32deps dans le répertoire de votre executable (TestSDLNET\bin\Debug pour une compilation en mode debug)
Relancez maintenant l'application : vous devez voir apparaître l'application dans une fenêtre s'executant sans aucun problème !









(aucun commentaire actuellement)