LimbStudio

Blog de LimbStudio sur le developpement de jeux video en 2d.

Translate this page!

vendredi 16 janvier 2015

LimbEscape Alpha 0.7

Mise à jour...


Bien le bonsoir!

J'ai bien avancé sur LimbEscape, je vous présentes ça de suite:

Extrait du log: 

Ajout d'une fonction victoire qui fait revenir au menu principal
Ajout d'un bouton retour en jeu
Réecriture du système de collision pour corriger des bugs
Correction de bug d'affichage (caisse affiché sur la bonne couche) 

Le plus long à été de réecriture les collisions, car c'était le bazar! J'ai donc synthétisé toutes les possibilité de déplacement possible.

Plutôt que d'écrire le code pour  chaque direction, j'utilise un code générique utilisable dans toutes les directions ce qui allégé par 4 le texte.

Je procéde comme suit:

En fonction de la direction voulue, j'initialise un vecteur de déplacement (par exemple pour allée en haut à droite = -1 en Y  , je l'initialise à (0,-1).

Ensuite, grâce à ce vecteur je vais pouvoir vérifié mes collisions par rapport à la position du joueur:

si je suis en (5,5) , je verifie que en (5,5) + vecteurDeplacement je n'ai pas d'obstacle.
Si je n'ai pas d'obstacle : 
je me déplace.
 
Si j'ai un obstacle non franchissable:
 et que je sais qu'il est poussable => je vérifie que dans la position (5,5) + vecteurDeplacement*2 je n'ai pas d'obstacle. Si il n'y en à pas , je pousse l'élement et je deplace le joueur.

Dans tout les cas un element ne peut pas être franchissable et poussable à la fois.

 Voila pour la nouvelle mécanique qui est beaucoup plus simple et rapide que l'ancienne.

 Un affichage presque parfait...

 
 Autre nouveauté, l'affichage dans le bon ordre de tous les élements (sauf le joueur mais j'y travail). En effet, dans la 0.6, le problème se posait lorsque l'on déplaçai une caisse, elle finissait soit par être dessiner au dessus d'un mur, ou bien sous un objectif , j'ai donc réglé le problème.

D'une part, les elements sont stockés dans un seul est même vecteur que l'on nommera elementHolder lors du chargement. (mur, caisse, objectifs et depart confondu)
je scinde ensuite ce tableau en 2 parties: d'un coté, les murs et les caisses dans tableauElem (vector à deux dimension), et de l'autre les objectifs dans repereObjectif. (le depart est invisible pour le joueur donc pas besoin de l'utiliser ici.)

Pour tableauElem (un tableau de pointeur), je parcours elementHolder à la recherche des murs et des caisse, dès que j'en trouve un ou une, j'enregistre son adresse dans l'entrée correspondant à sa position sur la carte dans tableauElem. En gros : Si je trouve un caisse qui à pour position (5,4) sur la carte, j'enregistre son adresse  en tableauElem[4][5] dans le tableau.
 le repereObjectif est un vector de nombre entier . Je parcours elementHolder et dès que je trouve un objectif, j'enregistre sa position au sein du tableau dans une nouvelle entrée de repereObjectif.

Une fois c'est deux element correctement initialisés, je dessine en premier le support de la carte, puis tout les objectifs (car collés au sol) et enfin je lis le tableau d’élément dans l'ordre par rangé de Y (d'où l'inversion [Y][X] du tableau . Lorsqu'une caisse est poussée, je la change de position dans le tableau . Pour reprendre l'exemple de toute à l'heure, ou l'on se deplacait de (0,1) , cela veut tout simplement dire que je remonte d'une rangé en Y, si ma caisse était en (5,4)  sur la carte, elle passerai de [4][5] à [3][5] dans tableauElem.Ainsi elle se retouvera dessiné avant les element present sur la rangé Y=4.Donc l'affichage se fera toujours correctement dans cette ordre la.


Après ce beau pavé, voici quelques images des avancées:








Pour expliqué un peu: La fonction de chargement aléatoire à était amélioré. La console montre le nombre d'objectifs restants avant d'avoir terminé.On peut également, si le puzzle actuelle ne plait pas, faire retour en jeu afin de soit chargé une carte en particulier, soit de relancer une carte aléatoire.

Le bouton Recharger n'est pas encore fonctionnelle. Il 'y a pas encore de sécurité concernant le nombre minimum de caisse à avoir. C'est à dire que si vous mettez moins de caisse que d'objectif , vous ne pourrez pas finir le puzzle (logique) , mais l'éditeur n'interdit pas de créer se genre de carte.

Un victoire se traduit par le retour sur l'écran de choix.

Quelques bug connus:
-Lorsque la carte ne possede pas de depart , le joueur est positionné en 0,0  sans tenir compte des élements, de plus il y a un bug d'affichage. Sera régler prochainement grâce à l'éditeur qui placera automatiquement un point de départ si il n'y en a pas.

-SegFault sur la class joueur, lorsque l'on ferme le jeu durant la phase d'intro, (dû aux sprite non chargé de la SFML) sera corrigé.

Fonctionnalités à venir...

Pour alpha 0.8: 

*corrections: ajout sécurité RessourceHolder

*Ajout de fonction restart en jeu (recharger la carte pour retenter le puzzle)
*Ajout d'un profil de joueur.
*Ajout d'un système de liaison de niveau
*Ajout d'un chronométré.
*Ajout des Packs ressources fonctionnels.

 ces ajouts ne seront pas forcement dans la 0.8.

Comme toujours, les sources à jours sont sur Github dans Limbstudio/Limbescape/Source
sinon l'executable est dans le dossier LimbStudio/LimbEscape/bin/ n'oubliez pas de telecharger le dossier Data ainsi que les dll ! (jetez un oeil au lisez-moi.txt!) 

C'est tout pour aujourd'hui!

Aucun commentaire:

Enregistrer un commentaire