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.


Messages - Starfighter

Pages: [1] 2 Suivante »
1
Super !

Merci beaucoup pour cette réponse ultra rapide.

Bonne journée.

2
Bonjour,

Classe concernée : sf::Window

Afin d'éviter tout risque de fuite mémoire je voudrais m'assurer que des appels successifs de la méthode setIcon() après la méthode create() pour redimensionner la fenêtre (plein écran / fenêtre) sont sans risques à ce niveau.

je ne mets que les parties de code concernées :


.../...

App.create (VideoMode(AppWidth, AppHeight,32), "Main", Style::Close);
App.setVerticalSyncEnabled(false);
App.setFramerateLimit(60);
App.setIcon(16, 16, icon_ptr);


while (App.isOpen())
{
.../...

if (Console_Command=="fullscreen")     // Toggle Fullscreen Mode
            {
            Fullscreen = !Fullscreen;
            App.create (VideoMode(AppWidth, AppHeight,32), "Main", Fullscreen ? Style::Fullscreen : Style::Close);
            Console_Command.clear();

            if (!Fullscreen) App.setIcon(16, 16, icon_ptr);  // Existe-t-il un problème de fuite mémoire potentiel
                                                             // ici ou App.create() a-t-elle déjà libéré la mémoire
                                                             // attribuée à l'icone précédente ?    
            }

App.display();
}

 


Merci d'avance pour votre réponse.

3
Discussions générales / Re : Quel moteur 3D choisir ?
« le: Mars 12, 2013, 08:24:54 pm »
Perso pour ce qui est de la programmation 3D j'utilise Irrlicht, mais je ne vois pas trop comment tu pourras le "coupler" avec SFML... chacun a son fonctionnement intrinsèque propre.




4
Bonjour,

Comme indiqué dans le titre, concernant la doc de la méthode sf::Image::getPixelsPtr  (  ) il me semble (sauf erreur de ma part) que ceci a dû changer :

"The size of the array is GetWidth() * GetHeight() * 4"

Merci pour cette excellente bibliothèque.

5
Bonjour,

Je vais peut-être dire une bêtise, mais si tu essayais de récupérer les coordonnées de la souris en utilisant deux variables au sein de la boucle d'évènements ça ne résoudrait pas le problème ?

6
Graphique / Re : Précisions concernant le fonctionnement de sf::Vertex
« le: Juillet 06, 2012, 11:11:51 am »
Merci beaucoup pour cette réponse très claire.

La "notion clé" me fait réaliser la nécessité des me pencher sur le fonctionnement d'OpenGL pour éviter de multiplier ce style de problèmes car ce n'est pas spontannément un concept qui m'est familier... donc à bosser. ;)

Merci encore et bonne journée.




7
Graphique / Précisions concernant le fonctionnement de sf::Vertex
« le: Juillet 06, 2012, 01:32:13 am »
Bonsoir,

Je suis en train de faire quelques essais avec la classe Vertex pour tracer des lignes et je suis confronté à un petit souci dont je ne trouve pas la cause : j'ai un problème de décallage sur Y (de 1 pixel trop haut) uniquement quand je tente de dessiner des lignes horizontales.

exemples :

Vertex vertices[] =
    {
    Vertex (Vector2f(0,0),Color (255,255,255)),
    Vertex (Vector2f(10,0),Color (255,255,255))
    };
    app.draw(vertices,2,Lines);
 

Si j'utilise le code ci-dessus la ligne n'apparaît pas à l'écran.

Pour l'obtenir sur la première ligne je dois utiliser les coordonnées (0,1) et (10,1)... ce qui devrait normalement la faire apparaître sur la 2nd ligne horizontale.

Ce problème ne se produit pas sur l'axe vertical : si j'utilise les coordonnées (0,0) et (0,10) la ligne verticale apparaît parfaitement aux bonnes coordonnées.

De même en utilisant une diagonale (0,0) et (10,10) le résultat est correct.
et si je pousse un peu plus l'expérience en utilisant (1,1) et (10,10), là aussi c'est parfait : le point (0,0) n'est pas dessiné.

Il y a quelque chose que je n'ai pas dû comprendre, je n'ai donc rien contre un petit éclaircissement.

Merci d'avance.

PS: J'ai noté que dans tous les cas le dernier point n'était jamais dessiné, mais ça je pense que ça doit être normal (il doit être considéré comme exclu ?)


8
Bonsoir Laurent,

Merci beaucoup pour tes explications limpides, ta patience indéniable et ton sens de l'humour.  :)

9
Bonjour,

Oups, autant pour moi, je pensais à tort que lire la souris directement suffisait. 

Effectivement une boucle d'évènements même vide résout le problème.

Histoire de tirer une leçon constructive de mon erreur est-ce dû à la nécessité de vider un buffer ? Ou est-ce autre chose ?


Par contre, mais là ça me semble moins anormal, l'appel à sf::Window::close() depuis cette boucle d'évènements ferme la fenêtre mais pas l'application qui reste présente dans les processus actifs... (ça c'est pas vraiment un problème, je vais le gérer autrement).

    while (app.pollEvent(_event))
        {
       if (_event.type == Event::Closed) app.close();
        }
 

Puis-je en déduire que la fermeture d'une fenêtre qui a été créée dans le corps principal du programme doit l'être également à ce niveau (et non pas à partir d'une fonction) ? Ou est-ce que j'ai fait une autre boulette ?

Désolé de poser un peu trop de questions, mais quitte à faire des erreurs, si je peux en comprendre les raisons ça me permettra de mieux appréhender le fonctionnement de SFML.

Merci encore.

10
lol, bon je suis désolé : à vouloir écrire un code trop réduit je me rends compte que ça a conduit à ne plus devenir vraiment compréhensible.  :-[

Le petit programme posté ci-dessus sert juste si on en fait un copier/coller et qu'on l'exécute à mettre en évidence le bug auquel je suis confronté dans mon programme qui gère un requester.


Je reprends mes explications en essayant d'être plus clair :

Donc à la place de la fonction Print(), mon programme appelle une fonction Requester() qui fait plein de choses dans la boucle avant de faire un app.display(), mais je me suis rendu compte que quoi qu'il y ait avant l'appel de cette fonction, la crash ne se produit (visiblement) que par rapport à l'appel de la fonction sf::Window::display () avec la conjonction du clic gauche de la souris... ce qui est plutôt embêtant justement pour une gestion de requester.  :)

La fonction Requester est en cours de développement ; je te mets ci-dessous juste le code de la boucle qui se limite en fait à afficher pour l'instant le (ou les) boutton(s) du requester ainsi que le texte qui doit y être affiché... la couleur des boutons étant différente selon que le pointeur de la souris soit ou non situé au-dessus.

int Requester (string _Text$, string _Answer1$, string _Answer2$, float _X, float _Y, float _W, float _H)
{
.
.
.

do              // Mouse management loop
    {

    MP=Mouse::getPosition(app);
    GetMouseButtons();    // Set MB1 / MB2  from Mouse buttons Left / Right status (0=OFF / 1= ON)
    _BFocus=0;

    if (_B1.contains(MP)) {_Button1_Rect.setFillColor(Color(0xA0,0xA0,0xE0,0xFF)); _BFocus=1;}
    else _Button1_Rect.setFillColor(Color(0x90,0x90,0xD0,0xFF));

    // Display  //
    app.draw(_Req_Rect); app.draw(_Button1_Rect);
    _TText.setPosition(_T1X, _Y+_H*.20); app.draw(_TText);    // Requesters's message
    _TAnswer1.setColor(Color(0xFF,0xFF,0xFF));    // Create text's relief effect
    _TAnswer1.setPosition(_Button[1].X1+_Butt_W/2-_TAnswer1.getLocalBounds().width/2,_Button[1].Y1+_Butt_H/2-_TAnswer1.getCharacterSize()/2-1); app.draw(_TAnswer1);
    _TAnswer1.setColor(Color(0x00,0x00,0x00));
    _TAnswer1.setPosition(_Button[1].X1+_Butt_W/2-_TAnswer1.getLocalBounds().width/2-1,_Button[1].Y1+_Butt_H/2-_TAnswer1.getCharacterSize()/2-2); app.draw(_TAnswer1);

    if (_N_Butt==2)    // If the function was called to manage 2 buttons...
        {
        if (_B2.contains(MP)) {_Button2_Rect.setFillColor(Color(0xA0,0xA0,0xE0,0xFF)); _BFocus=2;}
        else _Button2_Rect.setFillColor(Color(0x90,0x90,0xD0,0xFF));
        app.draw(_Button2_Rect);
        _TAnswer2.setColor(Color(0xFF,0xFF,0xFF));    // Create text's relief effect
        _TAnswer2.setPosition(_Button[2].X1+_Butt_W/2-_TAnswer2.getLocalBounds().width/2,_Button[2].Y1+_Butt_H/2-_TAnswer2.getCharacterSize()/2-1); app.draw(_TAnswer2);
        _TAnswer2.setColor(Color(0x00,0x00,0x00));
        _TAnswer2.setPosition(_Button[2].X1+_Butt_W/2-_TAnswer2.getLocalBounds().width/2-1,_Button[2].Y1+_Butt_H/2-_TAnswer2.getCharacterSize()/2-2); app.draw(_TAnswer2);
        }


    if ((MB1) && (!_BFocus)) _MB_Release=1;
    if ((MB1) && (!_MB_Release)) _MB_Selected=_BFocus;

    if (MB2) _Quit=1;

    app.display ();

    } while (!_Quit);

return _Button_Selected;
}
 

Donc comme tu pourras facilement le voir, à part l'affichage de rectangles et de textes, il n'y a pas grand chose. La question est pourquoi le clic gauche cause un crash dans cette boucle ?

Bien évidemment à cause du problème rencontré je n'ai pas encore pu gérer les bouttons sélectionnés par un clic...


Remarque importante : le bug persiste même si on n'appelle aucune fonction de lecture de la souris (position ou état des bouttons)

Forte intuition : N'existe t'il pas un rapport avec le fait que le bouton gauche de la souris soit géré par ailleurs par le système (pour déplacer la fenêtre en cliquant sur sa barre de titre ou sur les icônes réduire, agrandir et fermer) ?

Bonne soirée,
Merci



11
Bonjour Laurent,

Merci pour ta réponse.

Pour répondre à ta remarque, la fonction Print () telle qu'elle ne sert à rien d'autre que de créer les conditions qui produisent le crash.

J'ai lu dans plusieurs de tes posts que tu demandais d'écrire un code minimaliste pour bien isoler la cause des bugs (ce qui est fort logique), c'est ce que j'ai fait ici.

En fait, dans mon programme d'origine la fonction que j'appelle permet de gérer un requester (GUI personnalisée)... j'ai donc isolé le problème au niveau de app.display() et je n'ai mis dans l'exemple posté que l'essentiel du code qui recrée le planatage... d'où cette fonction Print().

Je suis désolé, j'ai voulu faire le plus court possible dans mes explications du post initial et j'ai visiblement mal expliqué la situation.

En résumé :
J'ai donc besoin dans mon programme d'appeler une fonction qui va appeler app.display() pour mettre graphiquement à jour un requester "maison" en fonction de la position de la souris, des clics éventuels ect... et qui ne rendra la main au code d'appel qu'une fois qu'un des boutons aura été sélectionné (ou l'opération abandonnée par un Esc).... et c'est le app.display() au sein d'une boucle qui fait partie d'une fonction qui plante pour je ne sais quelle raison quand on clique sur le bouton gauche de la souris.


Bien évdiemment, si j'enlève la fonction Print() dans cet exemple ça fonctionne puisque c'est justement dans cette fonction (et plus précisément dans la boucle do... while qui n'appelle que la fonction app.display()) que le programme crashe).

Donc (juste pour rire parce, on est bien d'accord  ;D) j'ai rajouté app.setVerticalSyncEnabled(true)... mais le plantage perdure.

J'espère que j'ai été plus précis dans mes explications.

Merci.

12
Bonsoir,

Voici un problème que j'ai rencontré en utilisant une fonction qui appelle sf::Window::display ()

J'ai réduit le bug à un code minimaliste qui n'a d'autre but que de mettre en évidence le problème qui se produit apparemment du fait de l'interaction entre l'appel de la fonction sf::Window::display () et le clic gauche de la souris (tout ça au sein d'une boucle qui attend une condition pour rendre la main).

Le soucis c'est que si on clique avec le bouton gauche de la souris plusieurs fois en la déplaçant dans la fenêtre, le programme crashe (la rapidité d'apparition du crash peut être variable).
Le crash est par contre quasi immédiat si on tente de cliquer sur l'icône de fermeture de la fenêtre après avoir cliqué une ou deux fois au sein de la fenêtre.

Le problèmel ne se produit pas si on clique sur les autres boutons de la souris.

Peut-être que j'ai fait une grosse boulette, mais je dois dire que si c'est le cas je ne vois pas où.  :-[


Donc pour produire le crash rapidement il suffit une fois l'application démarrée d'appuyer sur la barre d'espace (un texte va apparaître), puis de cliquer sur le bouton gauche de la souris une ou deux fois avec le pointeur situé dans la fenêtre puis d'aller cliquer sur l'icône de fermeture de celle-ci... plantage assuré (en tout cas chez moi).

Je tourne sous Windows XP


#include <string>
#include <SFML/Graphics.hpp>

using namespace std;
using namespace sf;


                    //        G L O B A L S        //

// Core
RenderWindow app;


                    //        F U N C T I O N S        //

void Print (string Source, float X, float Y);


int main()
{
    Event event;

    app.create (VideoMode(1024, 768), "Bug Lab");

    // Start the game loop
    while (app.isOpen())
    {
        while (app.pollEvent(event))
        {
            if (event.type == Event::Closed) app.close();

            if ((event.type == Event::KeyPressed) && (event.key.code == Keyboard::Space))
                {
                Print ("Hi there!",10,20);
                }
        }

    app.clear();
    app.display();
    }

    return 0;
}



                   //        F U N C T I O N   C O D E        //


void Print (string Source, float X, float Y)
{
    Text text1 (Source);
    text1.setColor(Color(0xCB,0x80,0xFF)); text1.setPosition(X, Y); app.draw(text1);

    do
    {
     app.display();
    }
    while (!Mouse::isButtonPressed(Mouse::Right));
}



 



Merci pour une aide éventuelle.  ;)

13
Général / Re : Erreur lors la "compilation" de SFML 2.0 avec CMake
« le: Juin 24, 2012, 11:41:00 am »
Bonjour Laurent,

Bien sûr, j'ai téléchargé et installé la version qui se trouve ici :

http://sourceforge.net/projects/mingw/files/Installer/mingw-get-inst/mingw-get-inst-20120426/


Pour info (je ne sais pas si ça te fera gagner du temps) elle comporte le fichier "libgcc_s_dw2-1.dll" qui a une date de modification au 2 décembre 2011.

De mon côté, ayant les idées un peu plus claires que hier soir, je vais faire de nouveaux essais pour voir si je n'ai pas loupé quelque chose.

Merci


M.A.J. :


Problème résolu... en dépaçant les répertoires Source et Distination sur le répertoire racine.
Visiblement, le nom du dossier de travail posait problème (d'espace ou d'autres caractères).


Pour info cette version de MinGW utilise la gcc  4.6.2

Encore merci et bon dimanche.

14
Général / Erreur lors la "compilation" de SFML 2.0 avec CMake
« le: Juin 24, 2012, 01:08:39 am »
Bonsoir à tous et à toutes,

J'essaye de "compiler" la dernière version de SFML 2.0 avec CMake sous Windows XP - 32 bits (je pense avoir correctement suivi le tutorial proposé à cet effet) mais j'obtiens l'erreur suivante à partir ce cmake-gui (j'ai choisis cette option car je découvre à peine ce soft : je suis donc débutant en la matière . :) ) :

Citer
The C compiler identification is unknown
The CXX compiler identification is unknown
Check for working C compiler: G:/Programming/CodeBlocks/MinGW/bin/gcc.exe
Check for working C compiler: G:/Programming/CodeBlocks/MinGW/bin/gcc.exe -- works
Detecting C compiler ABI info
Detecting C compiler ABI info - done
Check for working CXX compiler: G:/Programming/CodeBlocks/MinGW/bin/g++.exe
Check for working CXX compiler: G:/Programming/CodeBlocks/MinGW/bin/g++.exe -- works
Detecting CXX compiler ABI info
Detecting CXX compiler ABI info - done
Looking for sys/types.h
Looking for sys/types.h - found
Looking for stdint.h
Looking for stdint.h - found
Looking for stddef.h
Looking for stddef.h - found
Check size of void*
Check size of void* - done

CMake Error at cmake/Config.cmake:62 (message):
  Unsupported compiler
Call Stack (most recent call first):
  CMakeLists.txt:20 (include)



Configuring incomplete, errors occurred!


Les posts que j'ai trouvés relatifs à ce problème n'avaient pas d'éléments de réponse adaptés à ma situation (à ce qu'il me semble en tout cas).


Pour info :

- J'ai installé la dernière version de MinGW (qui fonctionne parfaitement avec SFML lorsque je compile mes projets sous Code::Blocks).

- J'ai bien indiqué le PATH dans la console et je lance cmake-gui.exe à partir de celle-ci pour que la variable ne soit pas perdue (à priori c'est bon à ce niveau car la "compilation" débute).

- J'ai spécifié un répertoire de destination différent du répertoire source (respectivement SFLM_Dest et SFML_Source).

- J'ai séléctionné l'option "mingw makefiles" pour le générateur de projet.



Et maintenant je ne sais plus trop quoi faire d'autre.  :(

Je n'aurais rien contre un petit coup de main si quelqu'un a déjà rencontré et résolu ce problème.

Merci d'avance et bon week-end.



15
Merci beaucoup pour cette réponse.

Je n'ai donc plus de scrupules... une bonne gestion de quelques variables globales
devrait assouplir l'interopérabilité de mon sytème de fonctions.  :)

Bonne soirée et encore merci.

Pages: [1] 2 Suivante »
anything