Dév. Application interactive III

Slides:



Advertisements
Présentations similaires
PoBot – Club de Robotique de Sophia Antipolis – La vision sur un robot Afin de pouvoir se déplacer correctement et savoir où aller,
Advertisements

Courbes de fonctions avec Excel
Courbes de fonctions avec Excel
(Classes prédéfinies – API Java)
Lexique des manœuvres de base pour utiliser à PowerPoint
Les attributions de valeur (le signe =). Dans cette présentation, nous allons tenter de représenter ce qui se passe dans la mémoire de lordinateur quand.
La fonction Style Permet de créer des types de texte, par exemple
Les TABLEAUX Retour au menu principal.
Support Initiation Publisher 2010
Introduction à la programmation (420-PK2-SL) cours 15 Gestion des applications Technologie de linformation (LEA.BW)
12 novembre 2012 Grégory Petit
PowerPoint97 …tout simplement
POWERPOINT 97 POMazagol Les barres d'outils PowerPoint donne la possibilité douvrir de nombreuses « barres doutils ». Pour ajouter ou enlever une barre.
Créer une animation simple Gif avec ImageReady.
420-B63 Programmation Web Avancée Auteur : Frédéric Thériault 1.
Transformations de visualisation en OpenGL
Création d'un diaporama Création d'un diaporama
Introduction au paradigme objet Concepts importants surcharge (overload) redéfinition (override) Définition d’une classe Définition des attributs.
GRAPHISME PAR ORDINATEUR
Gestion de Fichiers Arbres B.
Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 5 – Héritage, Interfaces et Listes génériques.
Visualisation de surfaces décrites analytiquement
Comment réaliser une mise en page ?. Tracer une zone de texte.
Procédures et fonctions
31 octobre 2012 Grégory Petit
Création et présentation d’un tableau avec Word 2007
PowerPoint Nouveau document Titres Grille et repères
Cliquez pour commencer l’explication…. Trouver la poignée de recopie et incrémenter les valeurs La poignée de recopie, c’est le petit carré noir en bas.
Plan de la leçon Réf. p. WRD- 149 Les styles Les listes hiérarchiques
Programmation créative – Les vecteurs
Micro-intro aux stats.
Tutorat en bio-informatique
Présentation générale
Structures de données avancées : Concepts du Multidimensionnel D. E ZEGOUR Institut National d ’Informatique.
Cours LCS N°4 Présenté par Mr: LALLALI
Structures de données avancées : LH (Hachage linéaire) D. E ZEGOUR Institut National d ’Informatique.
TICE 2 ième Semestre TD6 - Récapitulatif. Mars 2006TICE 2ième Semestre - Révisions2 Evaluation La semaine prochaine Deux demi groupes, minutes d’examen.
Chapitre 1 Nombres relatifs.
Dév. d’application interactive III Tile Engine. Plan de leçon  Moteur de tuiles (tile engine)  Définition  Classes  Dans le cadre de ce cours, nous.
GRAPHISME PAR ORDINATEUR
Bureau - Souris - Clavier Premiers pas sous Windows XP.
S’initier à Google Sketch Up avec la création d’une maison Commencez par ouvrir le logiciel, nous allons afficher tous les outils dont nous aurons besoin.
La programmation créative Scratch
Programmation créative Semaine 03. Agenda de leçon  Rotation d’un sprite  Modifier la couleur d’un sprite.
Scratch Partie 03 Version A15.
Programmation créative – Les vecteurs
Utilisation des formules de base
Premières notions de la 3D
Faire déplacer le personnage à l’aide des flèches du clavier Il y a plusieurs façon de procéder selon nos attentes, mais en voici une qui est très simple:
Master 1 SIGLIS Jave Lecteur Stéphane Tallard Chapitre 5 – Correction TD.
Qu’est-ce qu’un outil graphique?
Traitement d’images Semaine 09 v.A15.
ALGORITHME DE VOLÉES Programmation créatives Les volées, le spawning et les collisions.
Scénario Les scénarios permettent de modifier la position, taille … des calques au cours du temps. Son fonctionnement est très proche de celui de Macromedia.
PROCESSING Semaine 03. PLAN DE LEÇON Interaction avec un programme Gestion de la souris Gestion du clavier.
DreamWeaver Séance 2 HMIDA Ahmed A2008. Plan 1.Calques 2.CSS 3.Modèles 4.Formulaires 5.Comportements 6.Mise en ligne.
DREAMWEAVER Première séance Villaron Audrey – Shibly Tarek.
Exposé DREAMWEAVER 2 Guillaume DUBREUIL Adrien HADOUX.
Dreamweaver le retour Avec Les Formulaires Les Calques
Flash MX er Séance LIU Xinlei GI02.
Dreamweaver 2 Plan 1.Calques 2.CSS 3.Modèles 4.Comportements 5.Formulaires 6.Mise en ligne 1 Timothée Devaux Myriam Roudy Dreamweaver 2 Printemps 2008.
Télécharger :
EXPOSE FLASH 2 SI 28 24/10/2006 Delphine GODREAU Hélène PERRIER.
DREAMWEAVER MX2 - Séance 2 Les calques Les comportements Les scénarios Les formulaires Les feuilles de style Les modèles Les cadres Mise en ligne Jérôme.
Dreamweaver 2 Feuilles de Style CSS Formulaires Calques Comportements
Les calques Les Template (modèles) Les Comportements Les scénarios Les formulaires Les CSS Le serveur Web de l’UTC Présentation.
Cours 5 : Premiers pas avec PowerPoint  L’insertion de diapositives  Appliquer un modèle de conception  Les zones de texte  L’insertion d’images 
Les vues O.Legrand G.Seront. Les vues Dans Android, une ihm est composée de vues. Ces vues.
Transcription de la présentation:

Dév. Application interactive III Tile Engine – Hexagonal et Isométrique

Plan de leçon Carte hexagonale Carte isométrique

Carte hexagonale La carte hexagonale permet d’utiliser des hexagones au lieu de carrés pour représenter la carte Ces cartes sont utilisées dans certains jeux de plateforme tels que les RPG ou encore les RTS Civilization V™ utilise ce type de plateforme pour le déplacement des unités

Carte hexagonale : Principe Les cartes hexagonales permettent généralement le déplacement dans 6 directions au lieu de 4 ou 8 avec les diagonales Pour rendre un carte, il faut afficher une rangée d’hexagones avec un espace entre chaque pour permettre de dessiner les hexagones de la rangée suivante La rangée subséquente est décalée par rapport à la précédente

Carte hexagonale : Tile Pour développer le moteur de tuiles hexagonales, on utilisera la deuxième partie de la série de développement de moteur de tuiles Au lieu d’utiliser TileWidth et TileHeight pour déterminer la position des tuiles d’une par rapport aux autres, il faudra utiliser TileStepX et TileStepY De plus, on ajoutera la propriété OddRowXOffset qui détermine le décalage à la droite pour chaque rangée impaire Le fichier de tuiles utilisé ne possède que quelques tuiles hexagonales.

Carte hexagonale : Tile Plusieurs plateformes reconnaissent le « Magic Pink » dans les images soit (255, 0, 255) Cette couleur est considéré transparente

Carte hexagonale : Tile TileStepX Carte hexagonale : Tile Modifier les propriétés suivantes pour la classe Tile TileWidth : 33 TileHeight : 27 TileStepX : 52 Ne pas oublier qu’il y a un espace vide entre chaque tuile, ainsi c’est TileWidth (33) plus la largeur de l’arrête supérieur (19) TileStepY : 14 C’est la moitié de la hauteur OddRowXOffset : 26 Soit 19 + 7 On peut toujours utiliser le même moteur pour les tuiles carrés Il faudra utiliser les valeurs TileWidth et TileHeight pour TileStepX et TileStepY et zéro pour OddRowXOffset

Carte hexagonale : Draw Dans la classe TileMap, commenter les références à AddBaseTile, car on n’empilera pas de tuile Pour la méthode Draw, il faudra la mettre à jour pour aller chercher les bons hexagones Ainsi pour firstSquare, on retrouve le code suivant Vector2 firstSquare = new Vector2( Camera.Location.X / Tile.TileStepX, Camera.Location.Y / Tile.TileStepY); Pour squareOffset Vector2 squareOffset = new Vector2( Camera.Location.X % Tile.TileStepX, Camera.Location.Y % Tile.TileStepY); Ne pas oublier que la caméra position de la caméra représente le coin supérieur gauche. Le vecteur firstSquare est le première carré à afficher. Le décalage sert à déplacer la vue sur des tuiles partielles, car si la caméra bouge de 16 pixels, on voudra alors afficher des moitiés de tuile aux extrémités.

Carte hexagonale : Draw Entre les deux boucles y et x, il faudra calculer le décalage des rangées pour celles qui sont impaires int rowOffset = 0; if ((firstY + y) % 2 == 1) rowOffset = Tile.OddRowXOffset; Mettre à jour le SpriteBatch.Draw pour réfléter la nouvelle réalité spriteBatch.Draw( Tile.TileSetTexture, new Rectangle( (x * Tile.TileStepX) - offsetX + rowOffset, (y * Tile.TileStepY) - offsetY, Tile.TileWidth, Tile.TileHeight), Tile.GetSourceRectangle(tileID), Color.White);

Carte hexagonale : Draw Pour rendre la carte plus intéressante visuellement, modifier la couleur de fond pour noir.

Carte hexagonale : Régler le défilement Dans la forme actuelle Si on se déplace de gauche à droite on n’atteint pas les limites Si on descend à la limite inférieure, le jeu plante Dans la méthode Update(), il faudra modifier les TileWidth et TileHeight pour TileStepX et TileStepY

Carte hexagonale : Problème de bordure Pour remédier au problème de bordure lorsque la caméra est en position zéro sur une des deux axes, il faudra ajouter un décalage de -14 px sur l’axe des X et Y Ajouter les propriétés globales suivantes baseOffsetX : -14 baseOffsetY : -14 Modifier le Draw pour additionner ces nouvelles propriétés à la position de rendu des tuiles (x * Tile.TileStepX) - offsetX + rowOffset + baseOffsetX, (y * Tile.TileStepY) - offsetY + baseOffsetY Modifier la dimension d’affichage pour 17 x 37 spriteBatch.Draw( Tile.TileSetTexture, new Rectangle( (x * Tile.TileStepX) - offsetX + rowOffset + baseOffsetX, (y * Tile.TileStepY) - offsetY + baseOffsetY, Tile.TileWidth, Tile.TileHeight), Tile.GetSourceRectangle(tileID), Color.White);

Carte hexagonale

Carte isométrique

Carte isométrique : Principe L’affichage isométrique permet de rendre des objets 3D dans un monde 2D Il s’agit d’une simulation du 3D, car il s’agit d’un subterfuge artistique Isométrique signifie « mesure égale » Beaucoup de jeux de tuiles sont disponibles sur OpenGameArt.org

Carte isométrique : Jeu de tuiles

Carte isométrique : Modifications Par rapport à la carte hexagonale, il n’y a que peu de différence dans les modifications à apporter Il suffit de remplacer la dimension des tuiles ainsi que les décalages TileWidth : 64 TileHeight : 64 TileStepX : 64 TileStepY : 16 OddRowXOffset : 32 HeightTileOffset : 32

Carte isométrique : Dimensions des tuiles 64 px 64 x 32 16 px 32 px

Carte isométrique : Exécution

Carte isométrique : Hauteur des tuiles On remarque que le jeu de tuiles possède des tuiles qui prennent plus d’espace verticale pour donner un effet 3D Pour le moteur, nous devons construire des tuiles de base et ensuite empiler les tuiles avec effet 3D On devra modifier la définition de la classe MapCell pour enregistrer ces tuiles 3D Dans la même veine que BaseTiles, il faut ajouter une liste de tuiles qui se nommera HeightTiles On ajoutera aussi une méthode pour ajouter des tuiles de hauteur public void AddHeightTile(int tileID) { HeightTiles.Add(tileID); }

Carte isométrique : Tuiles 3D Pour afficher ces tuiles 3D correctement, il faudra les dessiner dans un certain ordre On utilisera la profondeur en « z » qui est la méthode utilisée dans XNA pour afficher les sprites Dans un premier temps, il faudra modifier baseOffsetX et Y du jeu pour les nouvelles dimensions des tuiles int baseOffsetX = -32; int baseOffsetY = -64; float heightRowDepthMod = 0.0000001f; heightRowDepthMod sera utilisé plus tard pour gérer la pile de tuiles

Carte isométrique : Draw Modifier SpriteBatch.Begin spriteBatch.Begin(SpriteSortMode.BackToFront, BlendState.AlphaBlend); Cette ligne indique à XNA que nous désirons utiliser un paramètre de profondeur pour dessiner les tuiles du fond (1.0f) vers l’avant (0.0f) Ajouter après les décalages en X et Y deux variables float soient maxDepth et depthOffset Le premier permet de définir la profondeur maximale qui sera disponible pour dessiner n’importe quelle cellule Le second servira pour avoir le décalage en profondeur des tuiles empilées Dans notre cas, (51 + 51 * 64)/10 ou 33150 float maxdepth = ((myMap.MapWidth + 1) + ((myMap.MapHeight + 1) * Tile.TileWidth)) * 10; float depthOffset;

Carte isométrique : Draw Dans la boucle de X et avant le foreach, ajouter les lignes suivantes int mapx = (firstX + x); int mapy = (firstY + y); depthOffset = 0.7f - ((mapx + (mapy * Tile.TileWidth)) / maxdepth); mapX et Y ne servent qu’à simplifier la lecture du code depthOffset : 0.7f est la profondeur (z) de base auquel on soustrait la position relative de la tuile qui sera dessinée. Ainsi on « approche » le rendu vers la surface. Exemple pour la tuile à (10, 10)  0.7f - ((10 + (10 * 64))/33150  0,6804 Ne pas oublier que 1 est le fond et 0 la surface

Carte isométrique : Draw Remplacer le foreach par celui-ci foreach (int tileID in myMap.Rows[mapy].Columns[mapx].BaseTiles) { spriteBatch.Draw( Tile.TileSetTexture, new Rectangle( (x * Tile.TileStepX) - offsetX + rowOffset + baseOffsetX, (y * Tile.TileStepY) - offsetY + baseOffsetY, Tile.TileWidth, Tile.TileHeight), Tile.GetSourceRectangle(tileID), Color.White, 0.0f, Vector2.Zero, SpriteEffects.None, 1.0f); } On a que rajouter la profondeur de la couche du fond qui est 1.0f La couche de fond est expliquée dans un diapo précédent

Carte isométrique : Draw Immédiatement en dessous du foreach, il faudra en rajouter un second pour afficher les tuiles en hauteur int heightRow = 0; foreach (int tileID in myMap.Rows[mapy].Columns[mapx].HeightTiles) { spriteBatch.Draw( Tile.TileSetTexture, new Rectangle( (x * Tile.TileStepX) - offsetX + rowOffset + baseOffsetX, (y * Tile.TileStepY) - offsetY + baseOffsetY - (heightRow * Tile.HeightTileOffset), Tile.TileWidth, Tile.TileHeight), Tile.GetSourceRectangle(tileID), Color.White, 0.0f, Vector2.Zero, SpriteEffects.None, depthOffset - ((float)heightRow * heightRowDepthMod)); heightRow++; }

Carte isométrique : Draw heightRow sert à garder combien de tuiles ont été empilées On doit garder cette valeur, car on doit mesurer à quelle hauteur (décalage) que l’on dessine la prochaine tuile Avec le premier rectangle en paramètre, on doit déplacer le « curseur » de rendu à la verticale pour l’emplacement de la tuile à dessiner Avec le dernier paramètre, on doit déterminer la profondeur Z de la tuile à dessiner

Carte isométrique : TileMap Dans le drawTest(), ajouter les tuiles suivantes Rows[16].Columns[4].AddHeightTile(54); Rows[17].Columns[3].AddHeightTile(54); Rows[15].Columns[3].AddHeightTile(54); Rows[16].Columns[3].AddHeightTile(53); Rows[15].Columns[4].AddHeightTile(54); Rows[15].Columns[4].AddHeightTile(54); Rows[15].Columns[4].AddHeightTile(51); Rows[18].Columns[3].AddHeightTile(51); Rows[19].Columns[3].AddHeightTile(50); Rows[18].Columns[4].AddHeightTile(55); Rows[14].Columns[4].AddHeightTile(54); Rows[14].Columns[5].AddHeightTile(62); Rows[14].Columns[5].AddHeightTile(61); Rows[14].Columns[5].AddHeightTile(63);

Carte isométrique : Rendu p1

Carte isométrique : Objets superposés On remarque que dans le jeu de tuiles pour les rangées 9 à 13, ce sont pratiquement tous des tuiles que l’on peut superposer sur d’autre tuile Dans sa forme actuelle, le projet ne permet pas d’ajouter d’objet superposé sur les tuiles en hauteur Pour remédier à la situation, on créera dans la classe MapCell une nouvelle propriété On ajoutera une nouvelle liste de tuile que l’on nommera TopperTiles avec une méthode AddTopperTile qui sera homologue à AddBaseTile et AddHeightTile

Carte isométrique : Objets superposés On devra aussi ajouter une troisième boucle foreach à la suite des autres pour afficher les objets superposés foreach (int tileID in myMap.Rows[y + firstY].Columns[x + firstX].TopperTiles) { spriteBatch.Draw( Tile.TileSetTexture, new Rectangle( (x * Tile.TileStepX) - offsetX + rowOffset + baseOffsetX, (y * Tile.TileStepY) - offsetY + baseOffsetY - (heightRow * Tile.HeightTileOffset), Tile.TileWidth, Tile.TileHeight), Tile.GetSourceRectangle(tileID), Color.White, 0.0f, Vector2.Zero, SpriteEffects.None, depthOffset - ((float)heightRow * heightRowDepthMod)); }

Carte isométrique : Objets superposés Ajouter à la fin de drawTest() Rows[17].Columns[4].AddTopperTile(114); Rows[16].Columns[5].AddTopperTile(115); Rows[14].Columns[4].AddTopperTile(125); Rows[15].Columns[5].AddTopperTile(91); Rows[16].Columns[6].AddTopperTile(94);

Carte isométrique : Débogage Pour nous aider à visualiser la position de chaque tuile, nous allons ajouter une couche de débogage Dans Game, ajouter une propriété globale de type SpriteFont qui sera nommée pericles6 Ajouter au niveau du Content, un dossier fonts dans lequel il faut ajouter un nouvel élément SpriteFont Pour le type de police, taper pericles Pour la dimension, taper 6 Dans le LoadContent(), ajouter la ligne suivante pericles6 = Content.Load<SpriteFont>(@"Fonts\Pericles6");

Carte isométrique : Débogage Dans la méthode Draw à la suite des boucles foreach, ajouter le code suivant spriteBatch.DrawString( pericles6, (x + firstX).ToString() + ", " + (y + firstY).ToString(), new Vector2( (x * Tile.TileStepX) - offsetX + rowOffset + baseOffsetX + 24, (y * Tile.TileStepY) - offsetY + baseOffsetY + 48), Color.White, 0f, Vector2.Zero, 1.0f, SpriteEffects.None, 0.0f);

Carte isométrique - Exercice Ajouter une gestion des touches pour pouvoir activer ou désactiver le mode débogage

Références http://www.xnaresources.com/default.asp?page=TUTORIALS