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

Développement 2D, 3D et Jeux Discussion :

Outil pour construire des sprites à partir d'images


Sujet :

Développement 2D, 3D et Jeux

  1. #1
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    321
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 321
    Points : 360
    Points
    360
    Par défaut Outil pour construire des sprites à partir d'images
    Bonjour,

    Je travaille actuellement sur la conversion pour téléphones portables de jeux/applications développés en flash (desktop ou web). La technique de travail est vraiment différente et je suis amené à créer des sprites à partir de ressources existantes (séquences d'images notamment).
    Existe-t-il un outil ou une manière à partir de photoshop pour générer à partir de x images un sprite sachant que ces images n'ont as forcément les mêmes dimensions.
    Par exemple, pour des raisons de performance et de compatibilité, j'utilise des sprites pour rendre des caractères à l'écran (compteurs, écrans score...). Actuellement je vais sous photoshop, sélectionne une police et saisis tous les caractères dont je vais avoir besoin, exporte autant d'images que de caractères et crée le sprite à partir de ça. Autant dire que cela prend un certain temps que je préfèrerais exploiter à perfectionner d'autres aspects du jeu.
    Je reste à l'écoute de toute suggestion.

    Bonne soirée,

  2. #2
    Membre habitué Avatar de Polyfructol
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Avril 2007
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Avril 2007
    Messages : 131
    Points : 157
    Points
    157
    Par défaut
    Salut.

    J'ai été confronté au même problème que toi au niveau de la génération de fonts, et après avoir tester plusieurs outils, mon choix s'est porté vers Codehead's Bitmap Font Generator.

    Après pour les sprites dessinés, j'avais trouvé un outil en java qui me simplifiait la vie, mais je ne retrouve plus le nom. En tapant Sprite Sheet Editor dans google, tu dois pouvoir trouver ton bonheur (en tout cas ça sera plus adapté que photoshop).

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Mars 2005
    Messages : 249
    Points : 349
    Points
    349
    Par défaut
    Pour les fonts, j'utilise ça : http://www.angelcode.com/products/bmfont/
    C'est dans le même genre que le "Codehead's Bitmap Font Generator".

  4. #4
    Rédacteur

    Avatar de loka
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2004
    Messages
    2 672
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 672
    Points : 5 509
    Points
    5 509
    Par défaut
    Pour les font, j'ai utilisé un éditeur en ligne il fut un temps :
    http://www.pentacom.jp/soft/ex/font/edit.html

  5. #5
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    321
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 321
    Points : 360
    Points
    360
    Par défaut
    Merci à vous, je m'empresse de teste ces outils en espérant me permette de ne plus perdre de temps. Savez-vous si l'un d'eux permet de générer des png avec transparence. J'ai testé très (trop?) rapidement Codehead's Bitmap Font Generator et il m'a semblé qu'il était impossible de générer des images avec background transparent. Je vous tiens au courant de mes tests

  6. #6
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    321
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 321
    Points : 360
    Points
    360
    Par défaut
    Bonjour après quelques heures à tester les logiciels proposés, je n'ai pas trouvé la solution à mon problème.
    Avec Codehead's Bitmap Font Generator, le problème est que je n'arrive pas à générer de fond transparent. Le résultat n'est du coup pas exploitable.
    Le produit d'AngelCode semble plus poussé mais je rencontre des problèmes d'utilisation. Tout d'abord, je n'arrive pas à forcer le soft a produire une image contenant les caractères dans l'ordre lexicographique, tous les caractères sont dans le désordre. De plus, comme pour le premier, il n'est possible de générer que sur fond noir, ce qui est problématique dans la mesure où en J2ME je ne peux pas définir de couleur transparente, je dois passer par des png transparents directement.
    Certains d'entre vous savent s'il est possible de générer une image similaire à celle jointe à ce post (découpé à la main) ?

    Merci par avance pour votre aide qui m'a déjà permis de découvrir ces outils


  7. #7
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Mars 2005
    Messages : 249
    Points : 349
    Points
    349
    Par défaut
    Concernant l'ordre des caractères, c'est normal : le programme optimise l'espace pour obtenir une texture la plus petite possible. Il génère aussi un fichier descriptif qui te permet de connaitre l'emplacement de chaque caractère. Si ça t'intéresse je peux te passer du code C++ pour parser ce fichier descriptif.

    Et concernant la transparence, il ne devrait pas y avoir de problème, tant en png qu'en tga. Vérifies que tu as bien coché la case "32 bits" dans "fonts settings", car en 8 bits tu n'auras pas de transparence.

  8. #8
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    321
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 321
    Points : 360
    Points
    360
    Par défaut
    J'ai bien positionné en 32 bits mais je ne vois pas oùspécifier la couleur du background pour mettre aucun/transparence

  9. #9
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Mars 2005
    Messages : 249
    Points : 349
    Points
    349
    Par défaut
    Citation Envoyé par leyee Voir le message
    J'ai bien positionné en 32 bits mais je ne vois pas oùspécifier la couleur du background pour mettre aucun/transparence
    Bizarre, normalement en 32 bits le fond est automatiquement transparent, en tout cas c'est le cas chez moi :
    cf screenshot http://img150.imageshack.us/my.php?i...9879231kl2.jpg
    et rendu sous photoshop : http://img301.imageshack.us/my.php?i...4226699av4.jpg

    Au pire sinon, tu peux essayer de l'exporter en tga, puis convertir en png via photoshop ou autre.

  10. #10
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    321
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 321
    Points : 360
    Points
    360
    Par défaut
    Oui effectivement avec les bon paramètres, c'est OK. par contre tous les caractères ne sont pas de largeur fixes il place les caractères les uns a coté des autres. N'existe il pas un moyen de faire que le bitmap généré soit en quelque sorte une grille où chaque case (de dimension fixe donc) est un caractère ?

  11. #11
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Mars 2005
    Messages : 249
    Points : 349
    Points
    349
    Par défaut
    Non, à ma connaissance ce n'est pas possible, pour les même soucis d'optimisation d'espace. Il faut parser le fichier .fnt pour connaître les dimensions de chaque caractère.

  12. #12
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Mars 2005
    Messages : 249
    Points : 349
    Points
    349
    Par défaut
    Voilà mon code pour parser ces fichiers, en C++, c'est fait un peu à l'arrache je l'avoue (et je te laisse le soin de la traduction en java )
    Note aussi que, si ton programme inclut déjà un parser XML, il est peut-etre plus intéressant pour toi de générer le fichier descripteur en XML.

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
     
    class CharDescriptor
    {
    public:
      int x, y, width, height, xoffset, yoffset, xadvance;
      char c;
    };
     
    CharDescriptor g_AllChars[256];
    unsigned char g_uFontHeight = 0;
    int g_iNbDescriptor = 0;
     
     
    // -----------------------------------------------------------------
    // Name : storeData_
    // -----------------------------------------------------------------
    void storeData_(char * sTitle, char * sKey, char * sValue)
    {
      int iVal;
      if (strcmp(sTitle, "common") == 0 && strcmp(sKey, "lineHeight") == 0)
      {
        sscanf(sValue, "%d", &iVal);
        g_uFontHeight = (unsigned char) iVal;
      }
      else if (strcmp(sTitle, "char") == 0 && strcmp(sKey, "id") == 0)
      {
        sscanf(sValue, "%d", &iVal);
        g_AllChars[g_iNbDescriptor++].c = (wint_t)iVal;
      }
      else if (strcmp(sTitle, "char") == 0 && strcmp(sKey, "x") == 0)
        sscanf(sValue, "%d", &(g_AllChars[g_iNbDescriptor-1].x));
      else if (strcmp(sTitle, "char") == 0 && strcmp(sKey, "y") == 0)
        sscanf(sValue, "%d", &(g_AllChars[g_iNbDescriptor-1].y));
      else if (strcmp(sTitle, "char") == 0 && strcmp(sKey, "width") == 0)
        sscanf(sValue, "%d", &(g_AllChars[g_iNbDescriptor-1].width));
      else if (strcmp(sTitle, "char") == 0 && strcmp(sKey, "height") == 0)
        sscanf(sValue, "%d", &(g_AllChars[g_iNbDescriptor-1].height));
      else if (strcmp(sTitle, "char") == 0 && strcmp(sKey, "xoffset") == 0)
        sscanf(sValue, "%d", &(g_AllChars[g_iNbDescriptor-1].xoffset));
      else if (strcmp(sTitle, "char") == 0 && strcmp(sKey, "yoffset") == 0)
        sscanf(sValue, "%d", &(g_AllChars[g_iNbDescriptor-1].yoffset));
      else if (strcmp(sTitle, "char") == 0 && strcmp(sKey, "xadvance") == 0)
        sscanf(sValue, "%d", &(g_AllChars[g_iNbDescriptor-1].xadvance));
    }
     
    // -----------------------------------------------------------------
    // Name : loadMyFont
    // -----------------------------------------------------------------
    short loadMyFont(char * sFontName, TextureEngine * pTexEngine)
    {
      char descFile[MAX_PATH];
      sprintf(descFile, "%s.fnt", sFontName);
      FILE * f = NULL;
      errno_t err = fopen_s(&f, descFile, "r");
      if (err != 0)
      {
        // TODO : handle error
        return -1;
      }
     
      char sTitle[64];
      char sKey[64];
      char sValue[64];
      bool bGuillemets;
      int curchar = 0;
      while (!feof(f))
      {
        wint_t c;
        do {
          c = fgetc(f);
        } while (c == ' ' || c == '\t' || c == '\n' || c == '\r');
        do {
          sTitle[curchar++] = (char)c;
          c = fgetc(f);
        } while (c != ' ' && c != '\t' && c != '\n' && c != '\r' && !feof(f));
        sTitle[curchar] = '\0';
        curchar = 0;
        if (feof(f))
          break;
        do {
          c = fgetc(f);
        } while (c == ' ' || c == '\t');
        while (c != '\n' && c != '\r')
        {
          do {
            sKey[curchar++] = (char)c;
            c = fgetc(f);
          } while (c != '=');
          sKey[curchar] = '\0';
          curchar = 0;
          c = fgetc(f);
          if (c == '\"')
          {
            bGuillemets = true;
            c = fgetc(f);
          }
          else
            bGuillemets = false;
          while ((bGuillemets && c != '\"') || (!bGuillemets && c != ' ' && c != '\t' && c != '\n' && c != '\r'))
          {
            sValue[curchar++] = (char)c;
            c = fgetc(f);
          }
          sValue[curchar] = '\0';
          curchar = 0;
          storeData_(sTitle, sKey, sValue);
          if (bGuillemets)
            c = fgetc(f);
          while (c == ' ' || c == '\t')
            c = fgetc(f);
        }
      }
      fclose(f);
      sprintf(descFile, "%s.png", sFontName);
      // TODO : load png file "descFile"
      return 1;
    }

Discussions similaires

  1. Réponses: 1
    Dernier message: 18/05/2006, 21h22
  2. Outils pour rechercher des fuites de memoires dans un prog
    Par elekis dans le forum Applications et environnements graphiques
    Réponses: 5
    Dernier message: 29/04/2005, 21h06
  3. [Logiciel] Outil pour développer des jeux vidéos
    Par Kiri dans le forum EDI et Outils pour Java
    Réponses: 4
    Dernier message: 16/06/2004, 20h29
  4. Réponses: 3
    Dernier message: 14/02/2004, 10h10

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