Skip to main content

Bonne année 2012 !

Avant de commencer, j’aimerais vous souhaiter à tous une bonne année 2012. Je vous souhaites tout ce que vous voulez. De mon coté, l’année 2012 devrait être bien rempli de petits projets. J’en ai plusieurs en tête. Je vais vous parler de ceux-ci en temps voulu 🙂

Comme petit cadeaux pour la nouvelle année, voici un petit screenshot de Humanity Last Hope. Le petit jeu que je suis entrain de faire avec XNA. Aujourd’hui j’ai ajouter des vagues d’ennemies. Ceux-ci parcours l’écran en suivant des points précis.

Humanity Last Hope

Je suis maintenant entrain de travailler sur Humanity Last Hope dans la suite de mon apprentissage de XNA. Le jeu sera simple. Ce sera en fait un jeu de type shooter en vue de dessus et qui scrollera verticalement. Il y aura des astéroïdes et bien sur des ennemis à abatre. Pour le moment il y a l’écran titre de fait et le scrolling du background. Je posterai des images dès que je vais en avoir.

À venir:

  1. Intégration des astéroïdes
  2. Intégration du vaisseau du joueur
  3. Intégration des ennemis
  4. Intégration du sons

Flood Control 1.0

Bonjour à tous ! Depuis quelque temps j’étudie un livre pour faire des jeux en XNA et C#. Jusqu’à présent, ça se passe bien. J’ai aujourd’hui terminé la version 1 du petit jeu qu’il y a à faire comme exercice. Vous pouvez le télécharger ici même. Le but, empêcher que la colonne de droite se remplisse d’eau. La colonne va monter jusqu’à ce que vous ayez fait 10 lignes. Une fois une ligne fait, la colonne baisse un peu. Une fois les 10 lignes fait, vous passez au niveau suivant et la vitesse augmente. Le jeu se joue avec le bouton gauche et droit de la souris. Il y a quelque autre trucs que je vais ajouter  au courant des 2 prochaines semaine. Je ne vous en dit pas plus :). Voici une petite image pour agrémenter le tout. N’hésitez pas à me donner vos commentaires.

Télécharger le jeu ici

Pour pouvoir jouer, vous devez installer Xna 4.0: http://www.microsoft.com/download/en/details.aspx?id=20914

XNA

Bonjour à tous ! Cette semaine, j’ai décidé d’essayer XNA. Résultat, je suis devenu accro. C’est très simple de faire des jeux avec cette librairie créé par microsoft. En cherchant sur le net des tutorials, je suis tombé sur un livre vraiment bien fait. Il se nomme XNA 4.0 Game development by Example. Je vous le conseille vivement si vous voulez apprendre le XNA. Le livre contient 4 jeux à créer. Chaques jeux est élaboré sur 2 chapitres. Un chapitre pour faire la base et l’autre pour le paufiner avec bien entendu des suggestions pour améliorer le jeu. Je vous poste donc 2 images du premier jeux à faire. Il s’agit d’un jeu de type puzzle.

Bomb catcher

Ça fait maintenant 5 semaines que je suis mon petit cours sur internet en étant beta testeur. Jusqu’à maintenant tout se déroule bien. Cette semaine j’avais un petit devoir très simple avec un mini jeu à créer. Il se nomme le Bomb catcher. Le principe est très simple. Des bombes tombe et le but est d’attraper celles-ci avant qu’elle frappe le sol. Je vous envoit un petit screenshot plus bas. Le jeu support le clavier, la souris et une manette de xbox360. Si le coeur vous en dit, vous pouvez le télécharger ici : BombCatcher.zip

Le jeu consiste en 3 petit level. Il faut attraper 10 bombes pour passer au niveau suivant. Voici les contrôles:

Clavier Souris Manette
Gauche <– gauche gauche
Droite –> droite droite
Quitter ESC back

Avancement

J’écris un message aujourd’hui pour vous dire comment se passe mon beta test du cours. Pour le moment tout se passe très bien. Les cours sont vraiment bien fait et facile à comprendre. Comment se déroule le cours ? Il y a 15 unités à faire. Il est suggérer de suivre 1 unité par semaine pour prendre bien le temps d’apprendre. Le cours possède un power point à lire. Une fois le power point lu, il est suggéré de lire un chapitre du livre qui est relié à la matière. Ce qui est bien c’est que je possèdais déjà ce livre dans ma collection de livre sur directX. Ensuite, il y a un exercice de programmation à effectué qu’on envoit par la suite à M. Harbour (Le professeur et auteur du livre). Il corrige l’exercice et nous redonne du feedback. Ensuite on a un petit test d’une dizaine de questions à faire qui est automatiquement corrigé. Finalement, à la fin de chaque unité il y a un petit sondage pour dire comment on a aimé ou non l’unité. Bref, j’aime bien mon expérience jusqu’à maintenant. J’aurai bientôt des images à poster des mes exercices d’ici une semaine ou 2. 🙂

Beta testeur

Bonjour à tous. Un petit message pour vous annoncer que je suis officiellement beta testeur pour le premier cours de directX sur Game Developer’s College. Cette école a été créé par Jonathan S.Harbour. C’est un professeur d’université qui a écrit beaucoup de livre de programmation de jeu. Je possède 3 de ses livres. Comment c’est arrivé ? Je m’étais inscrit sur son forum histoire de connaître les mises à jours ou les corrections de ses livres et j’ai vue qu’il cherchait du monde avec de l’expérience en c++ pour tester ses cours. J’ai donné mon nom et j’ai été choisi. Mon rôle est de faire comme si j’étais un étudiant et de lire et faire tout les exercices et notés les erreurs ou amélioration à apporter. J’ai commencé le premier cours hier et je peux vous dire que c’est très bien fait. Si jamais vous avez des questions, n’hésitez pas à communiquer avec lui sur le site du collège ou bien avec moi. Il va s’en dire que le développement de Cyclops et Space ball sera plus lent dans les prochaines semaines mais c’est pour une bonne cause 🙂

Screenshots

Voici donc des screenshots de ce qui est fait avec mon moteur cyclops. Bon visionnement. 🙂

Light / Mesh

La semaine dernière j’ai créé une classe pour la gestion des mesh et une autre pour la gestion des light. Pour l’instant je peux loader un mesh et l’afficher avec une lumière ambiant, un spot light, un point light ou une directional light. C’est vraiment cool. Je me suis fait un petit démo avec tout ça. Je vais vous poster des screenshots dans mon prochain message sur ce blog.

À venir cette semaine:

  • Finition de ma nouvelle classe pour les vecteurs
  • Reconstruction de ma classe pour mes sprites
  • Animation de sprites (edit: déplacé à la semaine prochaine)
  • Autre si j’ai du temps 🙂

Encore une fois, si vous avez des commentaires sur mon blog, n’hésitez pas à vous inscrire et à poster vos commentaires.

Cyclops

J’ai maintenant trouvé le nom officiel pour mon moteur 2D. Celui-ci se nommera Cyclops. Pourquoi ce nom ? Tout simplement parce que j’ai une vision claire de ce que je veux comme moteur 2d et que j’irai dans cette direction. Un autre aspect intéressant, un cyclop n’a qu’un oeil donc il ne peut voir en 3d. Je trouvais que ce nom allait bien en un moteur 2d.

J’ai recommencer à retravailler sur mon moteur cette semaine. Je refais un peu de restructuration mais je crois que ce sera pour le mieu. Je vous en redonne des nouvelles dès que possible. 🙂

Camera

Aujourd’hui je me suis permi une petite heure de travail sur mon moteur de jeu. J’ai travaillé sur la classe de la camera. Celle-ci dérive de la classe GameObject ce qui fait qu’on peut la déplacer avec la fonction move et qu’on y fait l’update avec la fonction update comme toutes les classes qui dérive de GameObject. Je pense entre autre à la classe pour les Sprites qui dérive elle aussi de la Classe GameObject. Un jour, il y aura aussi les emitteurs de particules qui dériveront de cette classe. La classe Camera fait, mon moteur contient déjà beaucoup de trucs qui peuvent servir à créer un jeu. Il y a un peu de ménage à faire dans le code mais ceci se fera automatiquement au fil du temps. Dès la semaine prochaine, il devrait y avoir plus d’update sur mon blog étant donné que mes vacances se terminent en fin de semaine.

Si vous voulez donner des commentaires sur mon blog, n’hésitez pas à vous inscrire. Le premier commentaire que vous allez faire devra être approuver par moi donc ne vous en faite pas si vous ne le voyez pas tout de suite. Une fois qu’un commentaire a été approuvé, les prochains le seront automatiquement. Ceci est pour éviter le spam. Croyez moi, j’en efface beaucoup à l’arrière. 😎

Pleins de nouvelles classes

La semaine dernière il y a eu tout pleins de nouvelles classes qui ont été créé.

TextureManager Comme son nom l’indique, cette classe contiendra un vector des textures qui sont présentements loader en mémoire pour le level en cours.
Tile Cette classe s’occupe des tile qui provienne des tilesets loader en mémoire avec le texture manager
Level S’occupe de gérer le fichier xml du level
Texture Représente une texture. Une fois loader, elle est placé dans le textureManager

Comme je suis présentement en vancance, il se peut que les mises à jours seront plus espacer jusqu’au 15 août.
Bonne semaine 🙂

OnLostDevice

J’ai enfin réglé un bug qui trainait depuis très longtemps. Lorsqu’on déplaçait la fenêtre ou si on la redimensionnait, il y avait un crash qui disait ceci :

Direct3D9: (ERROR) :All user created D3DPOOL_DEFAULT surfaces must be freed before ResetEx can succeed. ResetEx Fails.
Direct3D9: (ERROR) :ResetEx failed and ResetEx/TestCooperativeLevel/Release are the only legal APIs to be called subsequently
D3D9 Helper: IDirect3DDevice9::Reset failed: D3DERR_INVALIDCALL

J’ai chercher longtemps avant de trouver c’était quoi. En fait, tout était correct exepter une chose. J’appelais 2 fois de suite cette série de code :

OnLostDevice();
HR(mpDevice->Reset(&mD3dPresentParam));
OnResetDevice();

J’ai enlever le doublon et mon crash a été réglé comme par magie. J’ai trouvé l’indice qui me fallait en allant faire des recherches sur http://www.gamedev.net/  😛

Début des collisions

La semaine dernière j’ai commencé à travailler sur la gestion des collisions. Je me suis concentré davantage sur la collision par bounding box pour le moment. Je me suis créé une petite fonction dans ma classe sprite qui vérifie si celui-ci collisionne avec un autre sprite passé en paramètre. Pour le moment, la détection fonctionne assez bien mais il me reste plusieurs test à faire et un petit bug lorsque le sprite collisionne avec le coin d’un autre sprite. Parfois il ne le détecte tout simplement pas et le sprite passe au travers de l’autre.

J’ai aussi commencer à travailler sur mon éditeurs de niveaux. Je ne savais pas trop comment l’appeller alors j’ai pigé dans la mythologie grecque et j’ai choisi comme nom : Cyclope. Cet éditeur de niveau permettra de créé nos cartes rapidement et simplement. Il sauvegardera les map dans un format  crypter (*.map) pour ne pas que les joueurs les modifie pour tricher et les informations des tilesets utilisé seront sauvegardé en xml et seront général au projet.

À venir cette semaine:

  • Regard sur le bug qui concerne la détection de collision lorsque ça arrive dans un coins du bounding box
  • Affichage d’un tilemap
  • Poursuite de l’éditeur de niveau
  • Screenshots pour le blog

Classe des sprites

Cette semaine j’ai donné un grand coup pour ma nouvelle classe pour gérer les sprites. Je n’ai pas eu de problème majeur mais fait tout pleins de découvertes intéressante sur la gestions des sprites. Pour le moment la classe permet de loader une image et de l’afficher. On peut lui définir sa position ainsi que son point de pivot. Ce n’est pas beaucoup pour le moment mais il faut savoir que cette classe dérive de la classe gameobject et que celle ci contient d’autre attributs intéressant. Lorsque ma classe sera pas mal terminé, je vous détaillerai d’avantage son utilisation et je vous posterai une image. La semaine prochaine je vais m’attaquer à la gestion des collisions entre les sprites. Pour le moment je vais me concentrer sur la détection par bounding box et par le rayon tout dépendant de la forme du sprite. 🙂

D3DXVector3

J’étais entrain de me faire une belle classe pour gérer mes vecteurs mais en regardant pour un autre problème dans la doc de directX , je suis tombé sur D3DXVECTOR3. J’ai donc effacer ma classe de vecteurs et commencer à utiliser celle-ci. C’est beaucoup plus simple et ça évite de réinventer la roue. Bref, avant de ré-inventer la roue, vérifier dans la doc du sdk de directX (Si vous utilisez DirectX) pour voir si quelque chose existe déjà. Grace à cette découverte, ma classe pour les sprites a grandement avancé et devrait être complétée d’ici la fin de la semaine. 🙂

Petit retard

Aujourd’hui est seulement un petit message pour vous dire qu’il y a un petit retard dans l’avancement de space ball. Mais ne vous inquiètez pas, ce que j’avais prévue de faire pour cette semaine sera tout simplement reporter pour la semaine prochaine. 🙂

Fix bug d’affichage

La semaine dernière, j’ai pratiquement réalisé les objectifs que je m’étais donnés. J’ai donné un gros coup dans le refactoring des classes de bases. Je me suis retrouvé à n’avoir plus rien d’affiché à l’écran. J’ai donc du travailler fort pour réussir à ré-afficher quelque chose. J’ai réussi et du coup, mon refactoring m’a permis de régler plusieurs petits bug d’affichage qu’il y avait.  Il n’y a pas beaucoup de choses à dire cette semaine. Je vous laisse donc sur ce qui sera fait d’ici 2 semaines.

À venir dans 2 semaines :

  • Création de la classe de base des games objects
  • Création d’une classe qui dérive de la classe gameObject pour gérer les sprites.
  • Fix de crash s’il y en a
  • Fix de l’affichage du texte qui est assez étrange.

Refactoring

Cette semaine j’ai travaillé à faire bouger la balle. En faisant ça, j’ai vue plusieurs erreurs de conceptions au niveau des classes. J’ai donc décidé de faire un petit refactoring histoire que ce soit plus facile pour créer le jeu. J’ai commencer par créé un surface pour le background au lieu d’utiliser des sprites, ensuite j’ai créé des fonctions pour afficher une surface. On peut y spécifié sa taille, sa destination et finalement on peut spécifier si on veut que la surface prenne tout l’écran.

À venir la semaine prochaine:

  • Continuation du refactoring, il n’y aura probablement pas de nouveau éléments du coté visuel.
  • Fix des warning lors de la compilation.
  • Fix de crash s’il y en a
  • Fix de la balle qui fonctionne bizzare coté logique.

Premier bug majeur

Je recherchais la cause d’un de mes bugs lorsque je switchais du mode fenêtre vers le mode plein écran. J’ai cherché, cherché et cherché la cause de mon erreur. Il y a quelque minute je me suis rapeller un petit truc que j’avais apris lors de mon travail. J’ai donc essayé et j’ai pu trouver le bug en moins de 30 secondes. Mais quel est ce truc dites-vous ? Et bien c’est simple, lorsque vous travaillez avec le sdk de directX, je vous suggère de mettre directX en mode debug. Pour le faire, vous aller dans le dossier où vous avez installer le sdk de direct X et vous ouvrez le control panel de direct X. Rendu là vous choisissez ce que vous voyez dans l’image ci-bas :

*image non disponible

Vous pouvez essayer les autres options aussi. Mais si vous utilisez seulement l’option que j’ai entouré en rouge, s’il y a une erreur, celle-ci sera loggué dans le output de visual studio et c’est souvent un message très claire. C’est grâce à ça que j’ai découvert que mon erreur était une erreur d’inatention. J’avais mis un mauvais format de couleur au backbuffer. J’avais mis : D3DFMT_X8B8G8R8 au lieu de D3DFMT_X8R8G8B8. Bref, j’avais mis le format BGR au lieu de RGB pour la couleur. Cette erreur a du se faire avec l’auto-completion du code. lol. Donc pour conclure, n’oubliez pas le petit truc, ça vous évitera de la perte de temps.   Dernière petite chose, n’oubliez pas de remettre vos setting par defaut si vous voulez jouer à d’autre jeux par après, sinon vous allez trouver que votre FPS est pas trop haut et vous ne saurez pas trop pourquoi.