[C#] "Hello World" commenté en français
Proposé par izguit

le 26 September 2006 à 17h 51mn 23s

4174 visualisations



Code:

using System;
using Irrlicht; // Erreur de compilation içi? jetez un oeil au commentaire suivant
using Irrlicht.video;
using Irrlicht.core;
using Irrlicht.scene;

// Des problèmes avec cette source? 
// Quelques solutions qui pourraient vous aider :
//
// - Si votre compilateur dit qu'Irrlicht ne peut pas être trouvé,
//  ajoutez Irrlicht.NET.dll (in bin\win32-VisualStudio) comme Reference
//  dans l'explorateur de solutions (solutions browser)
// 
// - Si cela compile, mais mais que votre application rencontre une exception du type : 
//  "An unhandled exception of type 'System.io.FileNotFoundException' occurred in Unknown Module.
//  Additional information: File or assembly name Irrlicht.NET, or one of its dependencies,
//  was not found."
//  Irrlicht.dll est manquant. Copiez le dans le dossier Windows/System32 ou ajoutez-la dans l'explorateur de solutions

namespace _01.HelloWorld
{
    /// <summary>
    /// application exemple d'Irrlicht utilisant .NET
    /// Un tout petit peu plus compliqué que la version C++ 
    /// </summary>
    class Example
    {
        /// <summary>
        /// Le point d'entrée ("main") de l'application
        /// </summary>
        [STAThread]
        static void Main(string[] args)
        {
            // Initialisation du moteur, création d'un objet "device"
            IrrlichtDevice device = new IrrlichtDevice(DriverType.OPENGL);

            // Propriétés de la fenêtre, pas besoin de toucher aux WinForms, Irrlicht gère tout seul cela.
            device.ResizeAble = true;
            device.WindowCaption = "Irrlicht.NET C# example 01 - Hello World";

            // Chargement des textures en mémoire
            ITexture texSydney = device.VideoDriver.GetTexture(@"..\..\media\sydney.bmp");
            ITexture texWall = device.VideoDriver.GetTexture(@"..\..\media\wall.bmp");
            ITexture texLogo = device.VideoDriver.GetTexture(@"..\..\media\irrlichtlogoaligned.jpg");

            // Chargement du mesh animé Sydney.md2. 
            // Rq : le "@" devant la chaîne de caractères sert à ne pas doubler les antislashs "\" qui sont interpretés comme des commandes internes (e.g. \n pour les saut de ligne)
            // et à garder la chaîne tel qu'elle est inscrite. (doc c#)
            Irrlicht.scene.IAnimatedMesh mesh = 
                device.SceneManager.GetMesh(@"..\..\media\sydney.md2");

            // Test si le mesh sydney existe bien, sinon on génere une erreur (utile pour le déboguage)
            if (mesh == null)
            {
                System.Windows.Forms.MessageBox.Show(
                    @"Could not load mesh ..\..\media\sydney.md2, exiting.",
                    "Problem starting program");
                return;
            }

            // ajout de la camera    
            ICameraSceneNode cam = 
                device.SceneManager.AddCameraSceneNodeFPS(null, 100, 100, -1);
            cam.Position = new vector3d(20,0,-50);

            // ajout d'un node ("noeud") cube
            ISceneNode node = device.SceneManager.AddCubeSceneNode(15,null,-1,new vector3d(30,-15,0));

            // assignation de la texture au cube
            node.SetMaterialTexture(0, texWall);

            // et sans oublier d'ajouter le mesh animé au node, sinon il ne sera pas consideré dans la scène et ne sera pas rendu à l'écran.
            node = device.SceneManager.AddAnimatedMeshSceneNode(mesh, null, -1);
            node.SetMaterialTexture(0, texSydney);
            node.SetMaterialFlag(MaterialFlag.LIGHTING, false);

            device.CursorControl.Visible = false;

            
            // Début de la boucle principale
            int fps = 0;

            while(device.Run())
            {
                if (device.WindowActive)
                {
                    // Début du rendu
                    device.VideoDriver.BeginScene(true, true, new Color(0,100,100,100));

                    // rendu de tous les meshs
                    device.SceneManager.DrawAll();
                
                    // Logo
                    device.VideoDriver.Draw2DImage(
                        texLogo, new Position2D(10,10),
                        new rect(0,0,88,31), 
                        new rect(new Position2D(0,0),device.VideoDriver.ScreenSize),
                        new Color(0xffffff), false);

                    // fin du rendu
                    device.VideoDriver.EndScene();

                    // ... et un petit affichage des fps (frame per second = images/seconde) "pour le fun" ;)
                    if (fps != device.VideoDriver.FPS)
                    {
                        fps = device.VideoDriver.FPS;
                        device.WindowCaption = "Irrlicht.NET C# example 01 - Hello World ["+ 
                            device.VideoDriver.Name + "] fps:" + fps;
                    }
                }
            } // fin de la boucle


        } // fin de la fonction main

    } // fin de la class

} // fin du namespace

Options Liens officiels Caractéristiques Statistiques Communauté
Corrections
irrlicht
irrklang
irredit
irrxml
xhtml 1.0
css 2.1
Propulsé par FluxBB
Traduit par FluxBB.fr
Analysé par
878 membres
1424 sujets
11113 messages
Dernier membre inscrit: ElmasOzer
22 invités en ligne
Aucun membre connecté
RSS Feed