REALM  FACTORY

Un éditeur de niveaux pour XNA

 

Auteur de la version originale (anglais) : RB Whitaker.
Version française traduite par Robert Gillard.

 
   Bienvenue dans le tutoriel Realm Factory.  Realm Factory est un éditeur de niveaux pour la création de jeux avec Xna.  
   Ce tutoriel va vous apprendre à utiliser Realm Factory pour vos jeux faits avec Xna.
 

 1 - Télécharger et installer Realm Factory

   La version actuelle de Realm Factory peut-être téléchargée ici : www.starboundsoftware.com
 
   N'oubliez pas de télécharger également les dll's pour Xna (nous allons voir ce dont il s'agit dans un instant).
   Après que vous ayez téléchargé la version actuelle, la mise à jour se fait automatiquement ainsi vous n'avez pas besoin de vous inquiéter d'éventuelles autres mises à jour.
 
 

 2 – Créer un projet

   Quand vous ouvrez Realm Factory pour la première fois, il vous est demandé de cocher « Accepter la licence utilisateur final » ce qui n'est rien d'autre qu'un ordinaire
EULA. Cette demande n'est faite qu'une fois et lors d'une seconde ouverture du programme, cette fenêtre ne réapparaît plus.
 
   Ceci fait, une boîte de dialogue apparaît, vous demandant si vous voulez démarrer un nouveau projet ou ouvrir un projet existant (voir ci-dessous).
 
 
 

   Plus tard vous pourrez sélectionner Open Project... pour rapidement ouvir un projet déjà créé et que vous n'aurez pas oublié de sauver...
 
   Pour ce tutoriel, nous démarrons un nouveau projet donc vous choisissez New Project...
 
   Ceci va démarrer le nouveau projet en affichant la fenêtre ci-dessous :

 
 
 
   Dans cette boîte de dialogue vous allez pouvoir choisir le nombre de lignes et de colonnes que vous voulez affecter à votre jeu ainsi que la hauteur (height) et la largeur (width) de vos tiles mesurés en pixels.
 
   Vous pouvez également définir une couleur de fond d'écran en cliquant sur background color. Une fenêtre s'ouvre alors et vous propose un important choix de couleurs.
 
   Il a quelques petites choses à garder à l'esprit lors de la sélection de vos paramètres dans cette boîte de dialogue.
 

         - Vous pouvez changer ceux-ci à tout moment en choisissant Projects > Projects Settings à partir du menu.

        - Chaque niveau individuel peut avoir des quantités différentes de lignes et de colonnes ainsi que différentes tailles de vos Tiles.

 


 3 – Créer un Tile Set

   Une fois votre projet préparé, vous voilà maintenant prêts à définir les Tiles qui feront partie de votre programme.
 
   Dans ce tutorial, toutes les tiles sont basées sur des images, ce qui veut dire que vous pouvez charger n'importe quel tile pour créer votre niveau. Ces tiles peuvent être créées avec tout programme d'édition d'image comme paint ou Inskape, ceux-ci étant gratuits.
 
   Pour ajouter une nouvelle tile à votre projet, choisissez Project > Add Tile ou pressez Ctrl + T. Faites une recherche sur votre PC pour trouver les images que vous voulez utiliser dans votre jeu. Notez que par défaut, ces images seront ce que votre jeu Xna utilisera pour charger les tiles mais vous pourrez aussi, remplacer ces images plus tard selon vos besoins.
 
   Dès que vous avez rassemblé vos images, pressez le bouton Open et une nouvelle tile sera ajoutée pour chaque image, comme montré dans l'exemple ci-dessous.
 
 
 
 
   Notez que vous pouvez ajouter de nouvelles tiles quand vous le désirez, même quand vous avez déjà commencé à créer vos niveaux. Vous pouvez aussi supprimer des tiles existantes en les sélectionnant à partir de la liste de tiles et en pressant Delete. Vous pouvez aussi changer le nom des tiles, même d'une image qu'une tile utilise en double-cliquant sur une tile dans la liste de tiles.
 
 

 4 – Créer des niveaux

   Par défaut, un seul et nouveau niveau vient d'être ajouté à votre projet mais de nouveaux niveaux peuvent être ajoutés à tout instant en choisissant Project > Add Level ou en utilisant Ctrl + L .
 
   Par défaut, un nouveau niveau utilisera les paramètres que vous avez définis lors d'une précédente étape. Les paramètres d'un niveau, cependant, peuvent être changés à tout instant en double-cliquant sur un numéro de niveau dans la liste des niveaux.
 
   Ajouter des tiles dans l'un de vos niveaux est très facile. Pour ce faire, commencez par cliquer sur le numéro du niveau que vous désirez éditer. Cliquez ensuite sur la tile que vous désirez ajouter à votre liste. Vous avez maintenant plusieurs choix pour comment ajouter une tile donnée à votre niveau actuel. La façon la plus simple de procéder est d'utiliser le « Crayon », son icône est représentée par :
 
 
   Maintenant, cliquez où vous le désirez dans le niveau pour ajouter la tile choisie à cet endroit. Vous pouvez répéter cette opération autant de fois que vous le voulez jusqu'à ce que votre niveau devienne ce que vous vouliez qu'il soit.
 
   Par exemple, l'image ci-dessous montre un simple niveau de style Casse-Brique, créé en utilisant le « Crayon ».
 
 


 
   Vous pouvez également jeter un coup d'oeil rapide à deux autres fonctionnalités qui permettent la gestion de création de niveaux. Il s'agit du « Pot à Peinture » ou Paint Bucket qui vous permet de remplir de larges surfaces avec la même tile. Celà remplira toute une surface commençant là où vous avez cliqué et jusqu'à ce qu'un bord de votre aire de jeu soit rencontré.
 
   La « Gomme » ou Eraser tool agit de façon similaire au pot à peinture, mais au lieu de placer une tile quelconque, elle effaçe la zone parcourue par votre curseur.
 
   La combinaison de ces deux outils vous permet de réaliser rapidement et façilement le niveau de vos rêves...
 
 

 5 – Quelques Extras...

Undo/Redo

 
  Realm Factory possède un système Undo/Redo (défaire/refaire) que vous pouvez utiliser si vous faites une erreur. Pour procéder à une modification, choisissez simplement Edit > Undo ou Ctrl + Z pour revenir à l'état précédent. Vous pouvez refaire les actions qui ont été supprimées en choisissant Edit > Redo ou en pressant Ctrl + Y.
 
 

Rapporter un bug, présenter une requête ou donner votre avis

 
   Ce programme est une beta mais toujours en évolution et il vous est permis de l'utiliser gratuitement. J'espère, en échange, que vous prendrez le temps de me rapporter un bug éventuel ainsi que de me le faire savoir, si vous pensez à quelque implémentation susceptible de l'améliorer (Notez cependant que toute amélioration ne serait pas nécessairement implémentée dans la beta mais plutôt dans une nouvelle version). Tout autre retour de votre part serait grandement apprécié, que ce soit en positif ou en négatif.
 
   Parce que ceci est important pour le futur de ce programme, j'ai rendu tout rapport de votre part aussi simple que possible, vous pouvez envoyer vos avis en utilisant le menu Help > Submit... du programme. En travaillant ensemble nous pouvons rendre ce programme très fonctionnel.
 
 

6- Insertion dans votre jeu Xna

   Maintenant que nous avons parlé de toutes les choses importantes de Realm Factory, nous allons pouvoir charger notre niveau dans un jeu Xna.
 
   Le « Content Pipeline » (lien en anglais) de Xna rend l'opération très aisée.
 
 

   Téléchargez les DLLs

 
   Après avoir téléchargé Realm Factory, vous devez également télécharger les dlls (ce sont des librairies qui seront liées dynamiquement au programme). Je vous rappelle qu'il s'agit d'un fichier.zip que vous devrez extraire dans le dossier principal de votre projet.
 
  Notez que lorsqu'une nouvelle version de Realm Factory sera mise à jour, vous devrez aussi utiliser les nouvelles dlls correspondant à la nouvelle version. Ce fichier inclus deux dlls que vous allez « attacher » à la solution de votre jeu.
 
 

    Initialisez les Références (Voir schéma ci-dessous)

   Pour ce faire vous devez ajouter une référence au programme principal de votre Solution et une autre référence dans le « Content Project ».
 
   Dans l'explorateur de solution, à l'intérieur de votre projet principal, faites un clic droit sur le noeud References et choisissez Add References. Recherchez alors
RealmFactoryCore.dll qui se trouve dans le dossier où vous avez extrait les dlls.

   Ceci ajoutera une référence à RealmFactoryCore.dll dans votre jeu qui pourra alors lui-même utiliser les classes contenues dans cette dll.
 
   La seconde référence doit être ajoutée dans le « Content Project ». Par défaut, le nom du « Content Project » est le même que celui de votre projet principal mais auquel est ajouté le mot « content » à la suite. En supposant que vous ayez appelé votre jeu « BreakOut » , le nom du content project sera BreakoutContent(Content).
 
   De nouveau, faites un clic droit sur le noeud References et choisissez Add Reference. Comme pour la première référence, sélectionnez RealmFactoryContentManager.dll dans le dossier où vous avez extrait les dlls.
 
   Maintenant que vos deux références sont ajoutées, nous allons pouvoir passer au code C#. A ce moment votre explorateur de solution devrait ressembler à l'image ci-dessous.
 
 
 
 
 

 7 – Le Code C#

   Vous pouvez maintenant ajouter le ou les niveaux que vous avez créés (nomDeFichier.Realm) dans votre content project. Faites un clic droit sur le content project et choisissez Add > Existing Item . Xna Game Studio va automatiquement charger vos niveaux (initialisés dans les dlls) vous permettant ainsi d'y avoir accès dans votre jeu.
 
   Une chose à ne pas oublier : à la fin de vos directives using, ajoutez :
 
	using Starbound.RealmFactoryCore;
 
   Je vous recommande de créer un objet LevelSet afin de charger complètement un ensemble de niveaux ainsi qu'un objet Level pour charger le niveau courant, ces deux instances étant à créer comme variables privées.

  Ajoutez simplement ces deux lignes de code à l'intérieur de la classe principale de votre jeu, (game1.cs, à moins que vous n'ayez changé son nom) en dehors de toute méthode :
 
	private LevelSet levelSet;
	private Level currentLevel;
	float scale = 1.0f; //Echelle d'une tile
 
Dans la méthode LoadContent, vous pouvez charger vos niveaux à travers le content pipeline de cette façon :
 
levelSet = Content.Load<LevelSet>("myLevel"); //nom du fichier contenant vos niveaux
 
   Une chose très importante à garder à l'esprit est qu'à ce moment votre ensemble de niveaux ne contient que des définitions, pas de niveau jouable actuellement.
 
   Si vous faites une modification de niveau après avoir détruit par le jeu quelque chose à l'intérieur du niveau, alors il ne sera plus possible de récupérer le niveau original à travers le content pipeline. Vous devez alors créer une instance de niveau par l'ajout de la ligne suivante :
 
 currentLevel = levelSet.GetLevel("Level 1").CreateInstance();
 
   Insérez cette ligne dans la méthode LoadContent , à la suite de la ligne précedente, ou, à chaque fois que vous voudrez démarrer un nouveau niveau.
 
   Pour en terminer avec ce tutoriel, jetons un coup d'oeil au code qui gèrera notre niveau. (Pour une meilleure vue d'ensemble, j'ai écrit tout le code du fichier game1.cs)
 
using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;
using Starbound.RealmFactoryCore;     //Pour l'utilisation des références vers les dlls

namespace Breakout
{
    /// 
    /// This is the main type for your game
    /// 
    public class Game1 : Microsoft.Xna.Framework.Game
    {
        GraphicsDeviceManager graphics;
        SpriteBatch spriteBatch;
        //Texture2D background;  si vous voulez ajouter un background

        private LevelSet levelSet;
        private Level currentLevel;
        float scale = 1.0f;  //Echelle d'une tile

        public Game1()
        {
            graphics = new GraphicsDeviceManager(this);
            Content.RootDirectory = "Content";
        }

        /// 
        /// Allows the game to perform any initialization it needs to before starting to run.
        /// This is where it can query for any required services and load any non-graphic
        /// related content.  Calling base.Initialize will enumerate through any components
        /// and initialize them as well.
        /// 
        protected override void Initialize()
        {
            // TODO: Add your initialization logic here

            base.Initialize();
        }

        /// 
        /// LoadContent will be called once per game and is the place to load
        /// all of your content.
        /// 
        protected override void LoadContent()
        {
            // Create a new SpriteBatch, which can be used to draw textures.
            spriteBatch = new SpriteBatch(GraphicsDevice);

            // TODO: use this.Content to load your game content here
           
            //background = Content.Load<texture2d>("nomFichier"); si vous voulez ajouter un background

            levelSet = Content.Load<levelset>("myLevel"); //nom du fichier contenant vos         niveaux

           currentLevel = levelSet.GetLevel("Level 1").CreateInstance();

        }

        /// 
        /// UnloadContent will be called once per game and is the place to unload
        /// all content.
        /// 
        protected override void UnloadContent()
        {
            // TODO: Unload any non ContentManager content here
        }

        /// 
        /// Allows the game to run logic such as updating the world,
        /// checking for collisions, gathering input, and playing audio.
        /// 
        /// Provides a snapshot of timing values.
        protected override void Update(GameTime gameTime)
        {
            // Allows the game to exit
            if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
                this.Exit();

            // TODO: Add your update logic here

            base.Update(gameTime);
        }

        /// 
        /// This is called when the game should draw itself.
        /// 
        /// Provides a snapshot of timing values.
        protected override void Draw(GameTime gameTime)
        {
            GraphicsDevice.Clear(Color.CornflowerBlue);

            // TODO: Add your drawing code here
            spriteBatch.Begin();
            //Et si vous voulez ajouter un background
            //spriteBatch.Draw(background, new Rectangle(0, 0, 800, 480), Color.White);
            
            for (int row = 0; row < currentLevel.Rows; row++)
            {
                for (int column = 0; column < currentLevel.Columns; column++)
                {
                    Tile tile = (Tile)currentLevel.GetTile(row, column);
                    if (tile == null) { continue; }

                    Texture2D texture = tile.Texture;

                    spriteBatch.Draw(texture, new Rectangle(
                        (int)(column * currentLevel.CellSize.X * scale),
                        (int)(row * currentLevel.CellSize.Y * scale),
                        (int)(currentLevel.CellSize.X * scale),
                        (int)(currentLevel.CellSize.Y * scale)), Color.White);
                }
            }


            spriteBatch.End();

            base.Draw(gameTime);
        }
    }
}
 
 

 

 
 

Connexion

CoalaWeb Traffic

Today166
Yesterday126
This week292
This month3966
Total1743173

23/04/24