Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: [résolu]Tile map  (Lu 2424 fois)

0 Membres et 1 Invité sur ce sujet

Snitteur

  • Jr. Member
  • **
  • Messages: 63
    • Voir le profil
[résolu]Tile map
« le: Juin 15, 2014, 02:51:42 pm »
Bonjour, je viens de me remettre a coder et je rencontre actuellement un problème de code :

#include <SFML/Audio.hpp>
#include <SFML/Graphics.hpp>
#include <iostream>
#include <sstream>
#include <stdlib.h>
int LARGEUR_TILE;
int HAUTEUR_TILE;
int main()
{
    sf::RenderWindow World(sf::VideoMode(600, 600), "tilemap");

sf::Texture myTexture;
myTexture.loadFromFile("ressource/tuiles.png");

sf::Sprite mySprite(myTexture);
mySprite.setTextureRect(sf::IntRect(80,0,40,40));

 int map[16][8]
    {
        0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
        0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0,
        1, 1, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3,
        0, 1, 0, 0, 2, 0, 3, 3, 3, 0, 1, 1, 1, 0, 0, 0,
        0, 1, 1, 0, 3, 3, 3, 0, 0, 0, 1, 1, 1, 2, 0, 0,
        0, 0, 1, 0, 3, 0, 2, 2, 0, 0, 1, 1, 1, 1, 2, 0,
        2, 0, 1, 0, 3, 0, 2, 2, 2, 0, 1, 1, 1, 1, 1, 1,
        0, 0, 1, 0, 3, 2, 2, 2, 0, 0, 0, 0, 1, 1, 1, 1,
    };

sf::Sprite tuile0;
tuile0 = mySprite;

///BOUCLE///////////////////////////////
    while (World.isOpen())
    {
        sf::Event event;
        while (World.pollEvent(event))
        {
            if (event.type == sf::Event::Closed)
                World.close();
        }
World.clear();
for(int i = 0; i < 5; i++)
{
    for(int j = 0; j < 2; j++)
    {
        //selon le code trouve dans le tableau on parametre le bon tile et on le colle sur l'ecran
        switch(map[i][j])
        {
            case 0:
            tuile0.setPosition(i * LARGEUR_TILE, j * HAUTEUR_TILE);
            World.draw(tuile0);
            break;
        }
    }
}
World.display();
    }
}
 
 


Une fois exécuter ( pas d’erreurs ) je n'ai que sa :

« Modifié: Juin 16, 2014, 04:10:24 pm par Snitteur »

G.

  • Hero Member
  • *****
  • Messages: 1593
    • Voir le profil
Re : Tile map
« Réponse #1 le: Juin 15, 2014, 03:38:38 pm »
Faut chercher un peu quand même.
Et surtout initialiser tes variables avant de t'en servir. ;)

Snitteur

  • Jr. Member
  • **
  • Messages: 63
    • Voir le profil
Re : Tile map
« Réponse #2 le: Juin 15, 2014, 03:51:02 pm »
Je cherche sur le net depuis ce matin et je ne comprend toujours pas comment assigner un sprite ( tuile ) a un chiffre comme le "0" du tableau.

J'implore donc de l'aide.  Vous n’êtes pas obliger de m'aider mais j'en serais très ravie

Develog

  • Full Member
  • ***
  • Messages: 100
    • Voir le profil
    • E-mail
Re : Tile map
« Réponse #3 le: Juin 15, 2014, 04:36:10 pm »
Pour t'illustrer comment cela se passe il faut prendre un morceau de papier et un crayon, tu comprendras mieux ;)
Mais par exemple si dans ton tableau tu as un 0 alors ton sprite prend la texture prévu pour le 0

Snitteur

  • Jr. Member
  • **
  • Messages: 63
    • Voir le profil
Re : Tile map
« Réponse #4 le: Juin 15, 2014, 08:09:39 pm »
Bon sa fonctionne mais il j'ai des bug, certaine texture corresponde pas. De plus j'ai cette phrase
après un build :
      =>            c:/.........   warning: missing braces around initializer for 'int [8]' (-Wmissing-braces)

PS voici le code ( je le met pas en balise c++ ) car c'est quasi le même que le 1er et sa ferais un post sasser long

#include <SFML/Audio.hpp>
#include <SFML/Graphics.hpp>
#include <iostream>
#include <sstream>
#include <stdlib.h>
int LARGEUR_TILE = 30;
int HAUTEUR_TILE = 30;
int main()
{
    sf::RenderWindow World(sf::VideoMode(600, 600), "tilemap");

sf::Texture myTexture;
    myTexture.loadFromFile("ressource/tuiles.png");

 int map[16][8]
    {
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2,
        0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0,
        1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,
        0, 1, 0, 0, 2, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0,
        0, 1, 1, 0, 2, 2, 2, 0, 0, 0, 1, 1, 1, 2, 0, 0,
        0, 0, 1, 0, 1, 0, 2, 2, 0, 0, 1, 1, 1, 1, 2, 0,
        2, 0, 1, 0, 2, 0, 2, 2, 2, 0, 1, 1, 1, 1, 1, 1,
        2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
    }; <= L'erreur ce situ ici



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

World.clear();
///tuile 0 : rouge
    sf::Sprite mySprite(myTexture);
    mySprite.setTextureRect(sf::IntRect(0,0,40,40));
    sf::Sprite tuile0;
    tuile0 = mySprite;
///tuile 1 : Maron
    sf::Sprite mySprite1(myTexture);
    mySprite1.setTextureRect(sf::IntRect(40,0,40,40));
    sf::Sprite tuile1;
    tuile1 = mySprite1;
///tuile 2 : Bleu
    sf::Sprite mySprite2(myTexture);
    mySprite2.setTextureRect(sf::IntRect(80,0,40,40));
    sf::Sprite tuile2;
    tuile2 = mySprite2;








for(int i = 0; i < 13; i++)
{
    for(int j = 0; j < 7; j++)
    {
        ///selon le code trouve dans le tableau on parametre le bon tile et on le colle sur l'ecran
        switch(map[i][j])
        {
            case 0:
            tuile0.setPosition(i * LARGEUR_TILE, j * HAUTEUR_TILE);
            World.draw(tuile0);
            break;
            case 1:
            tuile1.setPosition(i * LARGEUR_TILE, j * HAUTEUR_TILE);
            World.draw(tuile1);
            break;
            case 2:
            tuile2.setPosition(i * LARGEUR_TILE, j * HAUTEUR_TILE);
            World.draw(tuile2);
            break;



        }
    }
}

World.display();
    }
}

j'espère avoir de l’aide.

G.

  • Hero Member
  • *****
  • Messages: 1593
    • Voir le profil
Re : Re : Tile map
« Réponse #5 le: Juin 15, 2014, 09:12:40 pm »
J'implore donc de l'aide.  Vous n’êtes pas obliger de m'aider mais j'en serais très ravie
C'est ce que je faisais en te disant d'initialiser tes variables. ;) En rejetant un coup d'oeil on voit vite que LARGEUR_TILE  et HAUTEUR_TILE n'étaient pas initialisées.

map c'est un tableau de tableaux, t'initialises un tableau avec { blabla }, donc un tableau de tableaux c'est { { blabla1}, { blabla2 } }
int a[3][4] = {  
 {0, 1, 2, 3},
 {4, 5, 6, 7},
 {8, 9, 10, 11}
};
Mais c'est pas obligatoire.
Et du coup, je suis pas sûr que ton tableau se remplisse réellement comme tu le penses.
map[0] c'est 0, 0, 0, 0, 0, 0, 0, 0
map[1] c'est 0, 0, 0, 2, 2, 2, 2, 2
16 tableaux de 8 entiers, et pas 8 tableaux de 16 entiers.
Ça peut expliquer ton problème de textures qui ne correspondent pas. Donc faut arranger ça autrement.

Et sinon à quoi servent tes mySprite ? Tu peux faire ça directement avec tes variables tuile. :o

Snitteur

  • Jr. Member
  • **
  • Messages: 63
    • Voir le profil
Re : Tile map
« Réponse #6 le: Juin 15, 2014, 09:57:45 pm »
Bon je viens d'apprendre un truc merci beaucoup. Maintenant si j’enlève le "map" mon switch ne marche plus et je ne sais pas comment remplir les "cases",  car je ne comprend pas trop le tuto sfml 2.0.
« Modifié: Juin 15, 2014, 10:01:16 pm par Snitteur »

Snitteur

  • Jr. Member
  • **
  • Messages: 63
    • Voir le profil
Re : Tile map
« Réponse #7 le: Juin 16, 2014, 10:10:45 am »
Problème résolut
« Modifié: Juin 16, 2014, 04:09:24 pm par Snitteur »