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

SDL Discussion :

Mouvements de tiles


Sujet :

SDL

  1. #1
    Membre actif Avatar de ironzorg
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 288
    Points : 245
    Points
    245
    Par défaut Mouvements de tiles
    Toujours dans le cadre du développement de mon jeu Tactical Forces Alpha , je suis allé piocher dans les tutoriaux proposés par le site de SDL , et j'ais bêtement recopié la méthode utilisée pour faire des niveaux en tiles. J'ais tout de même tenté de savoir comment cela marchait et j'ais à peu près réussi jusqu'a il y a quelques temps : lors du développement de l'IA du jeu , je me suis laissé séduire par la méthode qui consiste à utiliser des images différentes pour chaque ennemi. Or, je désirerait placer les images d'ennemis sur une même image ( fait un tile "ennemis" quoi ). Mais le problème est qu'avec la méthode du tiling de SDL , je n'arrive pas à faire bouger les images des ennemis !
    Voila le passage:
    else if( tile == TILE_CENTER )
    {
    tiles[ t ] = new Tile( x, y, TILETYPE_WALL, &clips[ TILE_CENTER ] );
    }
    else if( tile == TILE_TOP )
    {
    tiles[ t ] = new Tile( x, y, TILETYPE_WALL, &clips[ TILE_TOP ] );
    }
    else if( tile == TILE_TOPRIGHT )
    {
    tiles[ t ] = new Tile( x, y, TILETYPE_WALL, &clips[ TILE_TOPRIGHT ] );
    }
    else if( tile == TILE_RIGHT )
    {
    tiles[ t ] = new Tile( x, y, TILETYPE_WALL, &clips[ TILE_RIGHT ] );
    }
    else if( tile == TILE_BOTTOMRIGHT )
    {
    tiles[ t ] = new Tile( x, y, TILETYPE_WALL, &clips[ TILE_BOTTOMRIGHT ] );
    }
    else if( tile == TILE_BOTTOM )
    {
    tiles[ t ] = new Tile( x, y, TILETYPE_WALL, &clips[ TILE_BOTTOM ] );
    }
    else if( tile == TILE_BOTTOMLEFT )
    {
    tiles[ t ] = new Tile( x, y, TILETYPE_WALL, &clips[ TILE_BOTTOMLEFT ] );
    }
    else if( tile == TILE_LEFT )
    {
    tiles[ t ] = new Tile( x, y, TILETYPE_WALL, &clips[ TILE_LEFT ] );
    }
    else if( tile == TILE_TOPLEFT )
    {
    tiles[ t ] = new Tile( x, y, TILETYPE_WALL, &clips[ TILE_TOPLEFT ] );
    }
    //If we don't recognize the tile type
    else
    {
    return false;
    }
    Je n'arrive pas à bloquer les coordonnées d'une surface en particulier ...


    PS : C'est quoi la racine carrée dans math.h ?

  2. #2
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Je ne comprend pas le problème ni le source présenté. Il faudrait être plus clair

    PS : C'est quoi la racine carrée dans math.h ?
    sqrt

    Jc

  3. #3
    Membre actif Avatar de ironzorg
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 288
    Points : 245
    Points
    245
    Par défaut
    En fait j'utilise un fichier temporaire ( ici , c'est map01.map ) dans lequel j'inscrit des séries de nombres ( 00 , 01 , 02 etc ... ). Chaque nombre est associé à un tile ( par exemple 00 = TILE_CENTER )
    J'appelle ensuite une fonction qui lit la map , et pour chaque " 00 " qu'elle lit , elle place un tile de type TILE_CENTER
    d'où le
    else if( tile == TILE_CENTER )
    {
    tiles[ t ] = new Tile( x, y, TILETYPE_WALL, &clips[ TILE_CENTER ] );
    }
    Le probleme est que je n'arrive pas à accéder aux coordonnées d'un tile en particulier pour les modifier en plein jeu.

  4. #4
    Membre éprouvé
    Avatar de Sivrît
    Profil pro
    Inscrit en
    Février 2006
    Messages
    953
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2006
    Messages : 953
    Points : 1 249
    Points
    1 249
    Par défaut
    Ca ne me semble pas être la méthode la plus usuelle, du moins pour le "paysage".

    Dans l'idée on a généralement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SDL_SURFACE images[NB_TYPES_TILES]; // on charge la dedans nos graphs
    int map[MAX_X][MAX_Y]; // et ici le niveau
    Et pour afficher :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for(int x=0; x<MAX_X; x++)
       for(int y=0; y<MAX_Y; y++)
          Draw(x, y, images[map[x][y]]);
    Edit : Je viens de comprendre un peu mieux ce que tu utilises. Pour moi une "tile" correspond à une seule brique (ce qui me semble correspondre au sens anglais), plusieurs tiles pouvant se trouver dans une seule image.

    Je maintiens qu'il vaudrait mieux définir le terrain séparément. C'est généralement statique, "plein" (il n'y a pas de trous) et simple donc on peut se contanter d'un entier (ou structure très basique, ce qui évite de multiplier les "new" et donne quelque chose de compact). Ca permet aussi de pouvoir facilement trouver ce qu'il y a à une position donnée. Et c'est aussi pratique pour l'afficher en premier (donc au dernier plan).

    Après les éléments dynamiques (personnages, ...) sont bien dans une liste d'objets avec coordonnées, étape d'animation et tout ce qui est nécessaire, liste que l'on parcourera ensuite pour l'affichage. Ici il semble pertinant de jouer sur le polymorphisme.


    Cependant je ne vois pas ce qui t'empèche dans ton code d'aller faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tiles[index_grosmechant].x++;
    Re-edit: avec le ".x" c'est mieux

  5. #5
    Membre actif Avatar de ironzorg
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 288
    Points : 245
    Points
    245
    Par défaut
    Mais oui c'est bien sur ! Question stupide : il faut traiter les ennemis différemment du décor des maps ! Merci pour la solution lol ( nan mais des fois les questions que je pose lol )
    Sinon j'ais pas très bien compris ce que tu m'as montré
    SDL_SURFACE images[NB_TYPES_TILES];
    J'ais compris les boucles et tout ça mais le NB_TYPES_TILES est louche pour moi ...
    Sinon je me suis mal exprimé : quand je parlais de " tile ", je parlais d'une image sur laquelle sont regroupées toutes les images à utiliser pour représenter les décors.

  6. #6
    Membre éprouvé
    Avatar de Sivrît
    Profil pro
    Inscrit en
    Février 2006
    Messages
    953
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2006
    Messages : 953
    Points : 1 249
    Points
    1 249
    Par défaut
    Citation Envoyé par ironzorg
    Mais oui c'est bien sur ! Question stupide : il faut traiter les ennemis différemment du décor des maps ! Merci pour la solution lol ( nan mais des fois les questions que je pose lol )
    Bah, on a tous nos ornières.

    Citation Envoyé par ironzorg
    J'ais compris les boucles et tout ça mais le NB_TYPES_TILES est louche pour moi ...
    Dans l'idée c'est juste le nombre de types de cases que l'on a, vu que j'ai fait une image par type. Je l'ai mis façon "#define" car "TILE_TOPRIGHT" et compagnie laissent penser que les types sont fixes alors autant faire simple, mais ça peut se faire dynamiquement au chargement. Chez toi ça correspond à la taille de "clips".

  7. #7
    Membre actif Avatar de ironzorg
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 288
    Points : 245
    Points
    245
    Par défaut
    OK merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. probleme mouvement dans un paysage
    Par nonoRedDevils dans le forum OpenGL
    Réponses: 24
    Dernier message: 24/06/2004, 12h12
  2. [JButton] Mouvements souris + MousePressed
    Par Devil Redneck dans le forum Composants
    Réponses: 8
    Dernier message: 17/05/2004, 17h49
  3. [FLASH MX PRO] effet mouvement clip
    Par dens63 dans le forum Flash
    Réponses: 5
    Dernier message: 21/04/2004, 10h16
  4. [FLASH MX]le mouvement et les sacades
    Par VincentB dans le forum Flash
    Réponses: 6
    Dernier message: 16/01/2004, 23h42
  5. Comment limiter les mouvements du curseur??
    Par scorpiwolf dans le forum C++Builder
    Réponses: 9
    Dernier message: 07/07/2002, 22h09

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