IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SFML Discussion :

Algorithme de map


Sujet :

SFML

  1. #1
    Membre habitué Avatar de MotorX
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Août 2011
    Messages : 87
    Points : 134
    Points
    134
    Par défaut Algorithme de map
    Bonjour,

    Je cherche une façon expliquer/détailler de gérer une map en tittle mapping.
    En gros une fonction pour ouvrir un fichier level, sa case dans un tableau etc mais j'ai vraiment du mal.

    Dans mon programme actuel le main lance l'objet Menu qui ouvre une fenêtre, suite à l'appuie d'une touche sa lance une fonction ( et non un objet ) startGame qui se contente pour l'instant que de déclarer un objet Mapp dans lequel je suis bloquer.

    Par exemple j'ai essayé cette technique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    void Mapp::DrawMap(sf::RenderWindow & window, std::string texture)
    {
    	m_texture.loadFromFile(texture);
    	m_tileset.setTexture(m_texture);
     
    	sf::IntRect dest;
    	sf::IntRect source;
     
    	source.width =m_hauteurTile;
    	source.height = m_largeurTile;
     
        for(int i(0);i<m_largeurTile;i++)
        {
            for(int j(0);j<m_hauteurTile;j++)
            {
                dest.left = i*m_hauteurTile;
                dest.top = j*m_largeurTile;
                //source.left = (m_table[j][i]-'0')*66;
    			source.left = m_texturesLoad[j][i]* m_largeurTile;
                source.top = 0;
     
    			m_tileset.setTextureRect(source);
    			m_tileset.setPosition(dest.left, dest.top);
    			window.draw(m_tileset);
            }
        }    
     
        window.display();
     
    }
    Mais le problème c'est que des qu'on dépasse la 1ère ligne de tile sa ne draw pas au dessus de 8, il y a 8 tile par ligne, si je met 9 dans le tableau bien sa m'affiche rien vus que le 9 est à la ligne deux, il faut changer la position source.top mais je vois pleins de techniques différentes je cherche la plus performante s'il vous plait

    Merci de votre aide
    Mon twitter: Ici

  2. #2
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    J'ai pas vraiment comprit ton probleme ou tu bloque.

    Citation Envoyé par MotorX Voir le message
    Mais le problème c'est que des qu'on dépasse la 1ère ligne de tile sa ne draw pas au dessus de 8, il y a 8 tile par ligne, si je met 9 dans le tableau bien sa m'affiche rien vus que le 9 est à la ligne deux, il faut changer la position source.top mais je vois pleins de techniques différentes je cherche la plus performante s'il vous plait
    Tu t'es répondu , y a pas de méthode plus rapide , après j'ai un peu de mal a m'imaginer de mettre une neuvième valeur si c'est un tableau de 8x8.

    Apres dans ton code m'interpelle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for(int j(0);j<m_hauteurTile;j++)
            {
                dest.left = i*m_hauteurTile;
          //ect...
    m_hauteurTile est pareil , en général quand on fout des tile , y a le nombre de tiles puis son décalage en pixel mais la tous est pareil étrange.

    on gros ça donnerai plus ça de mon point de vue :
    Avec une fenêtre 320x240 et des tiles de 32x32

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    for(x = 0; x < 10;x++) // nombre de tiles en x 10 (10*32 = 320)
    {
        for(y = 0; y < 8;y++) // nombre de tiles en y 8 (8*32 = 256)
        {
            dest.left = x*32;
            dest.top  = y*32;
     
            m_tileset.setTextureRect(source);
            m_tileset.setPosition(dest.left, dest.top);
            window.draw(m_tileset);
        }
    }
    Après pas sur que ça soit le bon code , je sais pas vraiment ce que tu fais , mais idée est la.

  3. #3
    Membre habitué Avatar de MotorX
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Août 2011
    Messages : 87
    Points : 134
    Points
    134
    Par défaut
    Ok, donc je garde cette technique, oui ils font tous la même taille, ce que tu ma montré je le fais mais avec des defines.

    Grâce à ton conseil j'ai modifier un petit truc, ça ne fonctionne pas, or si je remplace >= 9 par, par exemple <=2 bien toutes les case 0, 1 et 2 s'affiche bien ( mais avec l'image de la ligne du dessous )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    void Mapp::DrawMap(sf::RenderWindow & window)
    {
    	sf::IntRect dest;
     
        for(int i(0);i<NB_BLOC_H;i++)
        {
            for(int j(0);j<NB_BLOC_L;j++)
            {
                dest.left = j* LARGEUR_TILE ;
                dest.top = i* HATEUR_TILE ;
     
    			if(m_tbl[i][j] >=9)
    				m_source.top = 31;
    			else
    				m_source.top = 0;
     
    			m_source.left = m_tbl[i][j] * LARGEUR_TILE;
     
     
    			m_tileset.setTextureRect(m_source);
    			m_tileset.setPosition(dest.left, dest.top);
    			window.draw(m_tileset);
            }
        }    
    }
    Puis la map est temporairement déclaré ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    [10][10] = {1,1,1,1,1,1,1,1,1,1
    		 ,1,0,0,0,0,0,0,0,0,1
    		 ,1,0,0,0,0,0,0,0,0,1
    		 ,1,0,0,0,0,0,0,0,0,1
    		 ,1,0,6,7,8,9,10,11,0,1
    		 ,1,0,0,0,0,0,0,0,0,1
    		 ,1,0,0,0,0,0,0,0,0,1
    		 ,1,0,0,0,0,0,0,0,0,1
    		 ,1,0,0,0,0,0,0,0,0,1
    		 ,1,1,1,1,1,1,1,1,1,1};
    Mon twitter: Ici

Discussions similaires

  1. Réponses: 7
    Dernier message: 19/02/2010, 09h42
  2. Réponses: 12
    Dernier message: 11/11/2007, 16h04
  3. map et algorithm copy
    Par ocean24 dans le forum SL & STL
    Réponses: 6
    Dernier message: 02/05/2007, 13h43
  4. algorithm et map
    Par ocean24 dans le forum C++
    Réponses: 8
    Dernier message: 24/04/2007, 08h47
  5. aide : recherche algorithme mapping
    Par nagty dans le forum XML/XSL et SOAP
    Réponses: 4
    Dernier message: 30/12/2005, 14h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo