Bienvenue, Invité. Merci de vous connecter ou de vous inscrire. Avez-vous oublié d'activer ?

Voir les contributions

Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.


Messages - Vidou

Pages: [1]
1
Projets SFML / Re: Animation de tiles.
« le: Juin 11, 2021, 09:32:05 pm »
C'est un peut plus compliqué que ça mais j'ai fini par m'en sortir.

Je savais a peut près comment faire, je voulais être sur que ce soit correct et optimisé et pas gourmand en ressources.

Merci :).

2
Projets SFML / Animation de tiles.
« le: Juin 09, 2021, 11:52:34 am »
Bonjour à tous.

Dans le but de passer le temps, je m'amuse à réaliser un "Mario like" (Super original me direz vous...).

Je créé mes maps avec Tiled et les lis et affiche avec les bibliothèques "TMX parser" et "TSX parser".

Mon souci est que j'ai des tuiles animées et je ne trouve aucun tuto ou bribe de code qui indiquent comment gérer ces animations.

J'ai quelques idées mais j'aimerais avoir votre avis si c'est correct ou voir si il y a pas plus simple ou mieux à faire.

Dans Tiled je créé mes animations et les enregistre dans mon fichier tsx.

Quand je lis ma map (enregistrée dans un tableau X,Y,Z (Z étant le numéro de calque)), je vais voir les propriétés de la tuile à afficher, propriétés qui se trouvent dans un tableau (image de mon fichier tsx).

Si c'est une tuile animée, alors je réalise l'animation.

Pour faire un essai, j'ai 4 tuiles animées que je souhaite afficher.
Cette animation se fait sur 4 images différentes.

J'ai donc essayé de faire ceci (sans gérer le temps pour le moment) :

mes animations sont sous forme anim0 = tuile X, anim1 = tuile X+1, etc...

Créé une variable temporaire image de ma tuile animée (varTemp).

Cherche le numéro X de la tuile a afficher en position X,Y,Z.
Si ma tuile numéro X est animée,
  Si varTemp < numéro X
    Enregistre le numéro de ma tuile dans varTemp.
  Sinon
    varTemp++
 
  Si varTemp == numéro X + 4
    varTemp = numéro X
 
numéro X = varTemp

affiche (numéroX).


en gros ça fonctionne MAIS comme mon animation est sur 4 blocs et que j'affiche 4 blocs, j'ai chaque bloc qui me prends une valeur de tuile et j'ai pas d'animation. premier bloc = anim 0 second bloc anim 1 etc... et quand reviens le premier bloc, varTemp = numéro X donc on reviens a la première image de l'animation.

J'ai donc pensé à faire un std::map d'une structure "animation" avec comme identifiant la valeur X,Y,Z.
De ce fait, j'aurais mes 4 blocs indépendants avec une animation distincte entre eux.
Mon problème c'est que je créé 4 fois la même animation (1 foi par bloc) et ça me semble pas optimisé.
Si je me retrouve avec 30 blocs identiques, j'ai 30 fois la même chose de stocké en mémoire. Pas cool.

du coup je me demande si c'est la bonne solution, ou si j'ai TOUT faux ?

Merci pour vos retours et de m'avoir lu jusque ici.




3
Général / Faire défiler une map faite en Tilemapping indéfiniment.
« le: Octobre 21, 2016, 08:36:07 am »
Bonjour.
Voici plusieurs jours que je m'arrache les cheveux pour faire défiler une map que j'ai créé, en continue (quand on arrive à la fin on affiche la colonne des premières tiles...
Voici l'image de ma map :



voici le code qui me l'affiche jusqu'à la fin mais après impossible d'afficher la 1ere colonne et la suivante après la colonne finale....

void Map::miseAJourMapLevel() // Procédure "miseAJourMapLevel" de la classe Map.
{
        sf::Vertex *quad; // Créé un pointeur vers un objet Vertex de nom "quad".
        int numeroTile(0), coordTileX(0), coordTileY(0), X(0), posX(getPositionInt().x), posY(getPositionInt().y); // Créé des variables de type entier et de noms "numeroTile", "coordTileX", "coordTileY", et "X", tous les 4 de valeur initiale "0".

        if (posX < LONGUEUR_FENETRE - longueurTile * nbTilesLongueurMonde)
                posX = 0;

        minX = (posX / longueurTile) - 1; // Exécute l'opération : '(valeur de type entier de la position en X sur l'écran, divisé par la valeur de type entier positif court de nom "longueurTile") - 1', et enregistre le résultat dans la variable de type entier et de nom "minX".
        minY = (posY / hauteurTile) + 1; // Exécute l'opération : ' (valeur de type entier de la position en Y sur l'écran, divisé par la valeur de type entier positif court de nom "hauteurTile") - 1', et enregistre le résultat dans la variable de type entier et de nom "minY".

        if (minY < 0) // Si la variable de type entier et de nom "minY" est inférieure à 0, alors :
                minY *= -1; // Multiplie la valeur de la variable de type entier et de nom "minY" par -1 pour inverser la polarité de la valeur de la variable "minY".
        else // Sinon, si la variable de type entier et de nom "minY" est supérieure à 0, alors :
                minY = 0; // La variable de type entier et de nom "minY", prends pour valeur "0".

        maxX = ((LONGUEUR_FENETRE - 1 - posX) / longueurTile) + 1; // Exécute l'operation : '(constante de préprocesseur LONGUEUR_FENETRE (valeur contenue dans "define.h") - 1 (car la 1ère valeur est X = 0 : (pour une définition d'écran de 1080X700, il y à des pixels de "X = 0 à 1079, et Y = 0 à 699")), - (valeur de type entier de la position en X sur l'écran, divisé par la valeur de type entier positif court de nom "longueurTile") + 1', et l'enregistre dans la variable de type entier de nom "maxX".
        maxY = ((HAUTEUR_FENETRE - 1 - posY) / hauteurTile) + 1; // Exécute l'operation : '(constante de préprocesseur HAUTEUR_FENETRE (valeur contenue dans "define.h") - 1 (car la 1ère valeur est Y = 0 : (pour une définition d'écran de 1080X700, il y à des pixels de "X = 0 à 1079, et Y = 0 à 699")), - (valeur de type entier de la position en Y sur l'écran, divisé par la valeur de type entier positif court de nom "hauteurTile") + 1', et l'enregistre dans la variable de type entier de nom "maxY".

        for (int Z(0); Z < nbCalques; Z++) // Créé une variable de type entier (int) et de nom "Z" ayant pour valeur initiale "0" et lui impose cette condition : pour (for) "Z" = "0", tant que "Z" est inférieur (<) à la valeur de la variable de type entier (int) et de nom "nbCalques", ajoute + 1 à la variable "Z" après chaque boucle effectué et exécute le code suivant :
        {
                for (int i(minX); i < maxX; i++) // Créé une variable de type entier (int) et de nom "i" ayant pour valeur initiale la valeur de la variable de type entier et de nom "minX" et lui impose cette condition : pour (for) "i" = valeur de la variable de nom "minX", tant que "i" est inférieur (<) à la valeur de la variable de type entier (int) et de nom "maxX", ajoute + 1 à la variable "i" après chaque boucle effectué et exécute le code suivant :
                {
                        for (int Y(minY); Y < maxY; Y++) // Créé une variable de type entier(int) et de nom "Y" ayant pour valeur initiale la valeur de la variable de type entier et de nom "minY" et lui impose cette condition : pour (for) "Y" = valeur de la variable de nom "minY", tant que "Y" est inférieur(<) à la valeur de la variable de type entier(int) et de nom "maxY", ajoute + 1 à la variable "Y" après chaque boucle effectué et exécute le code suivant :
                        {
                                if (i < 0 ) // Si la variable de type entier et de nom "i" à pour valeur une valeur inférieure à "0", alors :
                                {
                                        X = 0; // La variable de type entier et de nom "X" prends pour valeur "0".
                                        numeroTile = 166; // La variable de type entier et de nom "numeroTile" prends pour valeur "166" (correspond à une brique dans le jeu).
                                }
                                else if (i > nbTilesLongueurMonde - 1) // Sinon, si la variable de type entier et de nom "i" à pour valeur une valeur supérieure à la variable de type entier positif court de nom "nbTilesLongueurMonde" à laquelle on enleve 1 (-1), alors :
                                {
                                        X = nbTilesLongueurMonde - 1; // Soustrait 1 (-1) à la variable de type entier positif court de nom "nbTilesLongueurMonde", et entre la valeur dans la variable de type entier et de nom "X".
                                        numeroTile = mapArray(X, Y, Z); // Récupère le n° de tile dans le tableau virtuel de nom "mapArray" contenant le niveau avec le n° des tiles en position "{X,Y,Z}", et stocke ce numéro dans la variable de type entier et de nom "numeroTile".
                                }
                                else // Sinon, si la variable "i" est comprise entre "0" et la valeur de la variable de type entier positif court et de nom "nbTilesLongueurMonde" - 1, alors exécute le code suivant :
                                {
                                        X = i; // La variable de type entier et de nom "X" prends pour valeur la valeur de la variable de type entier et de nom "i".
                                        numeroTile = mapArray(X, Y, Z); // Récupère le n° de tile dans le tableau virtuel de nom "mapArray" contenant le niveau avec le n° des tiles en position "{X,Y,Z}", et stocke ce numéro dans la variable de type entier et de nom "numeroTile".
                                }

                                // on en déduit sa position dans la texture du tileset
                                coordTileX = numeroTile % nbTilesX; // Obtiens la position du n° de tile en X - 1 (car débute à 0) et l'enregistre dans la variable de type entier et de nom "coordTileX".
                                coordTileY = numeroTile / nbTilesX; // Obtiens la position du n° de tile en Y - 1 (car débute à 0) et l'enregistre dans la variable de type entier et de nom "coordTileY".

                                if ((((Z * maxX * maxY) + (X + Y * maxX)) * 4) < nbTilesLongueurMonde * nbTilesHauteurMonde * nbCalques * 4)
                                {
                                        quad = &m_vertices[((Z * maxX * maxY) + (X + Y * maxX)) * 4]; // Récupère l'adresse du Vertex de type Quad à afficher, dans le tableau de Vertex de nom "m_vertices" (de type quad), et l'enregistre dans le pointeur de type Vertex de nom "quad".

                                        //// on définit les quatre coins du quad à afficher :
                                        quad[0].position = sf::Vector2f(X * fLongueurTile, Y * fHauteurTile); // Correspond à faire : m_vertices[((Z * maxX * maxY) + (X + Y * maxX)) * 4].position = sf::Vector2f(X * fLongueurTile, Y * fHauteurTile). Cette instruction définit le coin supérieur gauche de la tile à afficher et lui affecte une position sur l'écran. Par exemple : ((Z * maxX * maxY) + (X + Y * maxX)) * 4) = 0, X = 0 et Y = 0, alors l'operation "X * fLongueurTile, Y * fHauteurTile" sera elle aussi = à 0 (donc le coin gauche superieur haut de l'écran ([X;Y] = [0;0]).
                                        quad[1].position = sf::Vector2f((X + 1) * fLongueurTile, Y * fHauteurTile); // Correspond à faire : m_vertices[(((Z * maxX * maxY) +( X + Y * maxX)) * 4) + 1].position = sf::Vector2f((X + 1) * fLongueurTile, Y * fHauteurTile). Cette instruction définit le coin supérieur droit de la tile à afficher et lui affecte une position sur l'écran. Par exemple : ((((Z * maxX * maxY) + (X + Y * maxX)) * 4) + 1) = 1, X = 0 et Y = 0, alors l'operation "((X + 1) * fLongueurTile, Y * fHauteurTile)" sera égale à 1 fois la valeur de la variable "fLongueurTile" pour la valeur en x, et 0 pour y (donc le coin gauche haut de l'écran + "fLongueurTile" pixels (= 1 tile) ([X;Y] = [fLongueurTile;0]).
                                        quad[2].position = sf::Vector2f((X + 1) * fLongueurTile, (Y + 1) * fHauteurTile); // Correspond à faire : m_vertices[(((Z * maxX * maxY) +( X + Y * maxX)) * 4) + 2].position = sf::Vector2f((X + 1) * fLongueurTile, (Y + 1) * fHauteurTile). Cette instruction définit le coin inférieur gauche de la tile à afficher et lui affecte une position sur l'écran. Par exemple : ((((Z * maxX * maxY) + (X + Y * maxX)) * 4) + 2) = 2, X = 0 et Y = 0, alors l'operation "((X + 1) * fLongueurTile, (Y + 1) * fHauteurTile)" sera égale à 1 fois la valeur de la variable "fLongueurTile" pour la valeur en x, et 1 fois la valeur de la variable "fHauteurTile" pour y (donc le coin gauche haut, plus "fLongueur" pixels, moins "fHauteur" pixels de l'écran ([X;Y] = [fLongueurTile;fHauteurTile]).
                                        quad[3].position = sf::Vector2f(X * fLongueurTile, (Y + 1) * fHauteurTile); // Correspond à faire : m_vertices[(((Z * maxX * maxY) +( X + Y * maxX)) * 4) + 3].position = sf::Vector2f(X * fLongueurTile, (Y + 1) * fHauteurTile). Cette instruction définit le coin inférieur droit de la tile à afficher et lui affecte une position sur l'écran. Par exemple : ((((Z * maxX * maxY) + (X + Y * maxX)) * 4) + 3) = 3, X = 0 et Y = 0, alors l'operation "(X * fLongueurTile, (Y + 1) * fHauteurTile)" sera égale à 0 pour x et 1 fois la valeur de la variable "fHauteurTile" pour y (donc le coin gauche haut, moins "fHauteur" pixels de l'écran ([X;Y] = [0;fHauteurTile]).

                                        // on définit les quatre coordonnées de texture du quad à afficher (présentes dans l'objet Texture de nom "textureTileset")
                                        quad[0].texCoords = sf::Vector2f(coordTileX * fLongueurTile, coordTileY * fHauteurTile); // Correspond à faire : m_vertices[(((Z * maxX * maxY) + (X + Y * maxX)) * 4].texCoords = sf::Vector2f(coordTileX * fLongueurTile, coordTileY * fHauteurTile). Permet de définir sur l'image contenant les tiles "textureTileset" (cf. Procédure "draw" en fin de page), l'angle supérieur gauche de la tile que l'on désire afficher. *1
                                        quad[1].texCoords = sf::Vector2f((coordTileX + 1) * fLongueurTile, coordTileY * fHauteurTile); // Correspond à faire : m_vertices[(((Z * maxX * maxY) + (X + Y * maxX)) * 4) + 1].texCoords = sf::Vector2f((coordTileX + 1) * fLongueurTile, coordTileY * fHauteurTile). Permet de définir sur l'image contenant les tiles "textureTileset" (cf. Procédure "draw" en fin de page), l'angle supérieur droit de la tile que l'on désire afficher. *2
                                        quad[2].texCoords = sf::Vector2f((coordTileX + 1) * fLongueurTile, (coordTileY + 1) * fHauteurTile); // Correspond à faire : m_vertices[(((Z * maxX * maxY) + (X + Y * maxX)) * 4) + 2].texCoords = sf::Vector2f((coordTileX + 1) * fLongueurTile, (coordTileY + 1) * fHauteurTile). Permet de définir sur l'image contenant les tiles "textureTileset" (cf. Procédure "draw" en fin de page), l'angle inférieur droit de la tile que l'on désire afficher. *3
                                        quad[3].texCoords = sf::Vector2f(coordTileX * fLongueurTile, (coordTileY + 1) * fHauteurTile); // Correspond à faire : m_vertices[(((Z * maxX * maxY) + (X + Y * maxX)) * 4) + 3].texCoords = sf::Vector2f(coordTileX * fLongueurTile, (coordTileY + 1) * fHauteurTile). Permet de définir sur l'image contenant les tiles "textureTileset" (cf. Procédure "draw" en fin de page), l'angle inférieur gauche de la tile que l'on désire afficher. *4
                                }
                                else
                                {
                                        exit(-9);
                                }
                        }
                }
        }
}

par avance merci de votre aide.

4
Général / Re : Compilation programme SFML impossible.
« le: Octobre 21, 2015, 04:46:50 pm »
J'ai déjà un projet bien avancé sous VS2015 mais avec SDL2. Je voudrais juste le passer avec SFML vu que c'est un projet C++. (même si j'ai été obligé du coups de le passer en compilation pour VS2013...)
Si quelqu'un à la solution ici où ailleurs elle sera la bienvenue.

5
Général / Re : Compilation programme SFML impossible.
« le: Octobre 21, 2015, 12:15:58 pm »
Ce n'est pas un problème avec la SFML mais avec mon VS2015.
Un simple "helloword" me sors toute ces erreurs :
https://s3-eu-west-1.amazonaws.com/sdz-upload/prod/upload/screenshot53.png

Misère...

6
Général / Re : Compilation programme SFML impossible.
« le: Octobre 20, 2015, 08:26:36 am »
Je l'ai posté mon code ^^
Et j'ai désinstallé et réinstallé VS2015, ce qui m'a supprimé la liste des erreurs que j'ai posté en 1er.
Il me fais donc ces erreurs à présent (quand je compiles pour VS2015)
https://s3-eu-west-1.amazonaws.com/sdz-upload/prod/upload/Sans%20titr-1.jpg
Je me suis rendu compte que j'ai déjà eu ce genre de problème avec SDL2 et même sans :
Quand je compiles avec les options pour VS2015 ->  https://s3-eu-west-1.amazonaws.com/sdz-upload/prod/upload/Sans%20titre-1164.jpg

je me retrouves avec ces erreurs lors de la compilation -> https://s3-eu-west-1.amazonaws.com/sdz-upload/prod/upload/Sans%20titr-1.jpg

Il me faut le passer en VS2013 et là il compile.

Personne à su me dire pourquoi ni comment ! Si vous trouvez ce serait cool :D
Merci !

7
Général / Re : Compilation programme SFML impossible.
« le: Octobre 19, 2015, 11:56:16 pm »
Bon j'ai un peut résolu le problème en disant de compiler en VS2013 au lieu de VS2015 et en téléchargent la librairie pour VS2013 mais ça me résout pas mon problème avec VS2015.... Merci quand même

8
Général / Re : Compilation programme SFML impossible.
« le: Octobre 19, 2015, 07:28:30 pm »
#include <SFML\Graphics.hpp>

int main()
{
        sf::RenderWindow window(sf::VideoMode(200, 200), "SFML works!");
        sf::CircleShape shape(50.f);
        shape.setFillColor(sf::Color::Color(255,255,244,250));

        while (window.isOpen())
        {
                sf::Event event;
                while (window.pollEvent(event))
                {
                        if (event.type == sf::Event::Closed)
                                window.close();
                }

                window.clear();
                window.draw(shape);
                window.display();
        }

        return 0;
}

c'est le code que j'essaye de compiler.

9
Général / Re : Compilation programme SFML impossible.
« le: Octobre 19, 2015, 07:22:44 pm »
haha ^^
sur un autre Pc j'ai ce message d'erreur (toujours sous windows VS2015 32 bits).
https://s3-eu-west-1.amazonaws.com/sdz-upload/prod/upload/Sans%20titr-1.jpg

10
Général / Re : Compilation programme SFML impossible.
« le: Octobre 19, 2015, 04:38:52 pm »
oui oui les configurations sont identiques ! (il me semble du moins).

11
Général / Compilation programme SFML impossible.
« le: Octobre 19, 2015, 04:24:18 pm »
Bonjour à tous.
J'ai un problème avec la compilation d'un code simple avec SFML :
J'ai 2 pc à ma disposition, tous 2 contiennent VS2015.
Sur un des 2 pc j'ai installé la SFML, exécuté la compilation du code, et ça a fonctionné.
Sur le second, j'ai un troupeau d'erreurs qui sont apparues.
Voici les Screenshots :
https://s3-eu-west-1.amazonaws.com/sdz-upload/prod/upload/Sans%20titre-1164.jpg (preuve que je suis sous VS2015).
https://s3-eu-west-1.amazonaws.com/sdz-upload/prod/upload/Sans%20titre-1163.jpg (Mes messages d'erreurs).

Déjà beaucoup de personne m'ont demandé si j'étais sur d'avoir VS2015 ! oui j'en suis sur ^^
De plus aussi si j'avais bien la version 32 ou 64 bit en fonction des paramètres ! Ça aussi c'est OK.

Je m'en remets donc à vous pour m'aider dans cette affaire.

 

Pages: [1]