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.


Sujets - Timidouveg

Pages: [1]
1
Fenêtrage / [SFML 2.2] Problème avec les évènements ?
« le: Juillet 19, 2015, 05:37:28 pm »
Bonjour à tous,

J'ai cherché sur le forum et sur internet, j'espère ne pas être passé à côté de la réponse. Excusez-moi donc si ce sujet a déjà été traité :s

Je rencontre un problème avec mon code pour les évènements pour la version 2.2 de SFML. Je ne sais pas si l'origine est mon code, SFML ou l'OS (Windows 7). J'ai observé deux comportements dont qui un arrive tout le temps, et l'autre qui arrive parfois.
- Événement régulier : Lorsque je suis sur mon jeu, fenêtre active, je ne touche pas à ma souris, dés que j'ai un message sur Pidgin (actif derrière pour papoter) ou que je change de fenêtre avec la combinaison de touches Alt-tab, un évènement de mouvement de souris s'active.
- Événement aléatoire : Lorsque je lance mon jeu, alors qu'il y une conversation avec souvent des alertes sur Skype, je tombe dans mon jeu (en réalité je descends), c'est à dire que l'évènement de la touche 3 du pavé numérique s'active et cette fois ne s'arrête pas.
Je vous mets mon code ici, et vous remercie pour votre aide :)
void Game::ProcessInput ( void ) {
  gm::RenderWindow& gmMainWindow = GetWindow (RenderTargets::ID::MainWindow);

  Event::Type eEventType      = Event::Type::None;
  sf::Keyboard::Key sfKeyCode = sf::Keyboard::Key::Unknown;

  sf::Event sfEvent;
  while (gmMainWindow.PollEvent (sfEvent)) {
    // Elementary events for the main window of the game
    switch (sfEvent.type) {
      // Close window :
      case sf::Event::Closed :
        eEventType = Event::Type::Closed;
        break;
      // Resize window :
      case sf::Event::Resized :
        gmMainWindow.SetView (sf::View (sf::FloatRect (0.f, 0.f, static_cast<GLfloat> (sfEvent.size.width), static_cast<GLfloat> (sfEvent.size.height))));
        gmMainWindow.SetSize (sf::Vector2u (sfEvent.size.width, sfEvent.size.height));
        ComputeWindowCenter ();
        eEventType = Event::Type::Resized;
        break;
      // Events of the keyboard
      case sf::Event::KeyPressed :
        eEventType = Event::Type::KeyPressed;
        sfKeyCode = sfEvent.key.code;
        break;
      // Events of the mouse
      case sf::Event::MouseMoved :
        if (!m_bPassMouseMoved) {
          eEventType = Event::Type::MouseMoved;
          // For the loop pass the redondant MouseMoved generated by
          // the changement of the position (probably a bug in the function
          // SetCursorPos for Microsoft Windows. I haven't checked for other OS).
          m_bPassMouseMoved = GL_TRUE;
        } else
          eEventType = Event::Type::None;
        break;
      case sf::Event::MouseWheelMoved :
        if (sfEvent.mouseWheel.delta > 0)
          eEventType = Event::Type::MouseWheelUp;
        else
          eEventType = Event::Type::MouseWheelDown;
        break;
      default :
        eEventType = Event::Type::None;
        break;
    }

    // Call of the HandleEvent of the states of the game
    if (eEventType != Event::Type::None)
      m_oStateStack.HandleEvent (eEventType, sfKeyCode);
  }
  // Unlock the MouseMoved for the next tick.
  if (m_bPassMouseMoved)
    m_bPassMouseMoved = GL_FALSE;

  // Call of the HandleInput of the states of the game
  m_oStateStack.HandleInput ();
}
Pour ce passage, m_bPassMouseMoved = GL_TRUE; j'ai eu un soucis de répétition du mouvement de la souris, il y a pas mal de temps, et j'avais trouvé sur internet qu'un bug dans Windows en serait à l'origine. J'avais résolu ce problème en faisant cette pirouette. Mais, je ne suis sûr de rien :)

Le reste du code n'est pas utile à mon avis, car j'ai mis un std::cout dans la condition du mouvement de la souris et il m'affiche bien le texte à chaque fois que :
- Une alerte Pidgin, et peut-être d'autres programmes, se déclenche.
- Je bascule vers une autre fenêtre.
- Je bascule vers la fenêtre du jeu.
- Lorsque le jeu passe d'un état à un autre (écran d'information, écran titre, écran de jeu), donc dans la même fenêtre, mais uniquement si une alerte à eu lieu et que je n'ai pas répondu. Ça peut carrément cumuler deux mouvement de souris parfois à ce moment. Et c'est un peu aléatoire apparemment.
J'ai codé une version avec GainedFocus et LostFocus, mais ça n'y change strictement rien. J'ai comme l'impression que c'est le même bug qu'il y a longtemps.

2
Graphique / Question sur setOrigin () et les floats
« le: Janvier 14, 2015, 05:39:01 pm »
Bonjour à tous :)

J'espère que ce sujet est dans la bonne section, je n'étais pas sûr, j'ai donc préféré tenté ici pour ne pas polluer des sections plus spécifiques.

Plusieurs variables de sf::transformable sont des floats comme la position, l'origine, ... Il me semble que c'est pour être plus en phase avec la carte graphique, non ? J'ai souhaité faire mes propres class Font et Text car j'avais des critères très précis pour mes jeux-vidéo, et sans entrer dans les détails, j'ai eu un bug graphique que j'ai rapidement résolu sans modifier SFML. Ceci dit, je trouvais que la correction que j'ai apporté n'étais pas élégante. Ce problème est lié à la méthode setOrigin (float x, float y) dans transformable qui peut accepter certes des floats, mais donc des nombres qui n'ont pas que des zéros derrière la virgule. Si vous jugez que les détails du soucis rencontré est intéressant, je vous les fournirais volontiers :)

Ce que je souhaite savoir, avant tout et essentiellement, c'est est-ce qu'il y a des situations dans lesquelles la présence de chiffres après la virgule dans les x et y de l'origine d'un transformable est utile ? Même question pour la position, même si ça ne pose aucun problème dans le cas que j'ai rencontré, mais c'est par curiosité.

3
Graphique / Texte bitmap
« le: Octobre 11, 2013, 01:57:58 pm »
Bonjour à tous,

Je souhaite ajouter à mon jeu du texte qui n'utilise pas les polices de caractères habituelles, mais une police bitmap de mon propre cru. Dans certains jeux-vidéo, la police de caractère utilisée est dessiné avec des détails, il ne s'agit pas d'un glyphe simple monochrome. J'aurais voulu utiliser le sf::text de SFML 2.0 avec un sf::font qui chargerait un fichier png et éventuellement un fichier contenant des informations de dimensions et position de chaque caractères pour s'y retrouver dans le fichier image, étant donné que mes caractères n'ont pas la même largeur.

Je me demandais si il existait une méthode connue ici pour faire cela. Si tel n'est pas le cas, j'envisage de me créer mon propre système de police et de texte inspiré de ceux de SFML, pouvant être dessiné par elle, mais adapté à mon besoin.

4
Bonjour à tous :)

Je rencontre un soucis pour passer les pixels d'une sf::Image à un glSubTexture3D soit en mode GL_TEXTURE_2D_ARRAY ou en mode GL_TEXTURE_3D, ainsi qu'avec l'écriture suivit de _EXT. Glew est bien initialisé et les extensions correspondantes sont bien vérifiées.

Une fois l'espace de la texture 3D ou 2D array allouée, j'envoie mes images une par une de façon à les avoir couche par couche et ainsi les manipuler via un shader au travers d'un seul appel de dessin d'objets instanciés. C'est pour expérimenter une optimisation de mon rendu.
Le programme plante lorsque j'utilise glSubTexture3D avec la méthode getPixelsPtr() de mon image.
void TexturesManager::LoadTextures(const std::string& stFileName, GLint iLayersCount) {
  // Récupération des textures dans le fichier
  sf::Image *psfImage = new sf::Image();
  if ( !psfImage ) {
    std::cerr << "Allocation de texture impossible" << std::endl;
    exit(1);
  }
  psfImage->loadFromFile("data/materials/textures/blocks/static/"+stFileName+".png");

  // Préparation au découpage des textures
  GLuint uiImageW       = psfImage->getSize().x;
  sf::Image sfTexImage;
  sfTexImage.create(32, 32);

  glEnable(GL_TEXTURE_2D_ARRAY_EXT);

  // Allocation de l'espace de stockage des textures dans la carte graphique
  glGenTextures(1, &this->m_uiBlocksTexID);
  glBindTexture(GL_TEXTURE_2D_ARRAY_EXT, this->m_uiBlocksTexID);
  glTexImage3DEXT(GL_TEXTURE_2D_ARRAY_EXT, 1, GL_RGBA8, 32, 32, iLayersCount, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
  glTexParameteri(GL_TEXTURE_2D_ARRAY_EXT, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
  glTexParameteri(GL_TEXTURE_2D_ARRAY_EXT, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
  glTexParameteri(GL_TEXTURE_2D_ARRAY_EXT, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
  glTexParameteri(GL_TEXTURE_2D_ARRAY_EXT, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);

  // Découpage et stockage des textures dans la carte graphique
  GLuint uiX = 0, uiY = 0;
  for (GLuint iLayer = 0 ; iLayer < iLayersCount ; iLayer++) {
    sfTexImage.copy(*psfImage, 0, 0, sf::IntRect(uiX, uiY, uiX+32, uiY+32), GL_TRUE);
    glTexSubImage3DEXT(GL_TEXTURE_2D_ARRAY_EXT, 0, 0, 0, iLayer, 32, 32, 1, GL_RGBA, GL_UNSIGNED_BYTE, sfTexImage.getPixelsPtr());
    iLayer++;
    uiX += 32;
    if (uiX < uiImageW) {
      uiX = 0;
      uiY += 32;
    }
  }

  glDisable(GL_TEXTURE_2D_ARRAY_EXT);
  glEnable(GL_TEXTURE_2D); // En raison d'un autre problème j'ai essayé ceci, mais ça ne change rien :s

  // Suppression de l'image du fichier
  delete psfImage;
}

Un autre problème se présente, que j'ai essayer de résoudre entre autres par glEnable(GL_TEXTURE_2D); que vous pouvez voir commenté. Dans une autre partie de mon code, deux shaders SFML sont initialisés pour faire du flou pour l'écran de pause du jeu. Tout fonctionne bien lorsque je commente à partir de glTexImage3DEXT(GL_TEXTURE_2D_ARRAY_EXT, 1, GL_RGBA8, 32, 32, iLayersCount, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);, mais si je libère ce dernier, les shaders de SFML plantent à l'initialisation. Ces shaders et la zone du code n'ont rien à voir avec les textures 3D ou 2D array. Mon flou travaille sur une texture 2D de la scène de jeu sans l'interface, rendu par un FBO.

J'espère avoir été clair, si ce n'est pas le cas, j'essaierais d'apporter le plus de précisions possible :)

5
Bonjour à tous :)

En ce moment, j'ai besoin de récupérer l'identifiant de texture côté OpenGL d'une image ou une texture de SFML pour le lier avec un framebuffer object et ainsi afficher un cube 3D et texturé en rotation dans la couche 2D qui sert à l'interface graphique de mon jeu 3D. D'autres choses du même type auront besoin du même procédé et de plus cela permet d'utiliser les fonctionnalités de SFML (comme la simplicité d'utilisation entre autres) pour gérer les textures sans perdre l'accès à l'identifiant pour tout travail qui se fait côté OpenGL.
J'ai été surpris de constater que la méthode GetId() pour un sf::Image ou un sf::Texture n'existait pas. en me renseignant j'ai vu aussi qu'il n'est pas possible de l'ajouter par héritage car l'ID est private. Un sujet à ce propos a été écrit par quelqu'un d'autre sur l'ancien forum : http://www.sfml-dev.org/old-forum-fr/viewtopic.php?t=1709
En lisant la réponse de Laurent, je comprends que ce type d'accès soit interdit dans un sf::Image, étant donné l'existence maintenant de sf::Texture. Par contre, sf::Texture pourrait tout à fait, à mon sens, permettre cette liberté.
Je sais bien que c'est une porte ouverte à des manipulations non-sécurisées de la texture interne, mais dans le cas d'un sf::Texture, ce que j'attends de ses méthodes c'est de me simplifier la vie, pas forcément de trop restreindre mes possibilités.

Je ne suggère pas nécessairement de rendre l'ID public, mais plus tôt protected pour permettre d'ajouter des méthodes supplémentaires par héritage, non pas dans sf::Image, mais au moins dans sf::Texture. Au programmeur d'être assez rigoureux pour éviter de faire n'importe quoi et ainsi profiter de cette liberté. Se passer par exemple de l'attachement d'une texture SFML du plan 2D avec un framebuffer par exemple, c'est assez dommage, je trouve. Autrement, il faudrait recopier les pixels, ce qui est un peu plus lent et contraire au principe du FBO (oui je donne l'exemple pour mon cas).

J'espère ne pas avoir ouvert un sujet déjà traité ici, j'ai cherché avant, mais bon :)
Qu'en pensez-vous et qu'en penses-tu Laurent ?

6
Projets SFML / [Jeu-vidéo] Demiurge
« le: Janvier 02, 2013, 01:00:14 am »
Bonjour à tous :)

Je souhaite vous présenter mon projet de jeu-vidéo.
Mon jeu s'intitule Demiurge et il s'agit d'un jeu de type bac à sable. Il est développé en C++ avec openGL, GLSL, SFML. Ma philosophie de développement est concevoir le jeu au fil du temps et le faire tester par les joueurs eux-même. Une fois bien avancé il sera commercialisé et continuera son développement, à la manière de jeux comme Minecraft, Terraria, ... Je suis seul dessus et apprend sur le tas.

Vous pouvez trouver la démo et des informations plus avancées sur le site officiel à l'adresse suivante :
http://www.demiurge.fr/
La page Facebook n'oblige pas d'avoir un compte pour la lire, et vous permet de suivre le développement.

Pour résumer l'idée du jeu, le joueur sera un démiurge et construira son monde à sa guise. Il pourra s'incarner pour vivre des expériences de vies variées et contribuer à sa création par ce moyen. Bien sûr, pour utiliser ses pouvoirs divins, tout comme pour former ses avatars durant ses incarnations, il devra gérer une monnaie céleste qu'il dépensera ou gagnera de plein de manières :)

J'ai souhaité créer un jeu qui fait appelle à la créativité, l'ingéniosité, la stratégie, la gestion, et l'aventure. Une sorte de jeu de Lego immersif en somme :)

Me concernant, je suis de niveau Bac+3 en informatique, ai fini mes études et suis sans-emploi depuis un sacré bout de temps. Je n'ai pas trop osé parler de mon projet sur des forums jusqu'à aujourd'hui, à part sur Facebook entre amis, parce que je crains les mauvaises critiques sur ma façon de travailler. En effet, je suis assez lent, n'ai pas toujours fait preuve de bonne méthode et malgré mon niveau d'étude, je suis assez autodidacte devant ce projet.

En montrant mon travail, je souhaiterais non seulement partager ce que je fais et commencer à faire connaître, mais aussi recevoir de bons conseils ou pourquoi pas transmettre quelque chose moi aussi à d'autres programmeurs passionnés :) Je compte montrer un peu de mon code, si c'est possible, ou au moins des explications, raisonnements ou schémas. Ceci permettra l'entraide :)

Pages: [1]