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 - Starfighter

Pages: [1]
1
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.

2
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.

3
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 ?)


4
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.  ;)

5
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.



6
Bonjour,

Avant de poster j'ai bien épluché la doc et cherché sur le forum une réponse à ma question (suffisament je l'espère) mais je n'ai pas trouvé de solution au "problème" suivant :

Existe-t-il un moyen quelconque d'obtenir l'adresse d'une fenêtre créée à partir de la classe sf:: RenderWindow (et non pas le WindowHandle) ?

Concrètement, si j'utilise une fonction nécessitant l'adresse de la fenêtre courante je fais ceci (code épuré) :


void Print (string _Source, float _X, float _Y, RenderWindow &_App);

int main()
{
RenderWindow app(VideoMode(1024, 768), "SFML works!");
.
.
Print ("Hi there!",50,80,app);
}


void Print (string _Source, float _X, float _Y, RenderWindow &_App)
{
    Text text;
    text.setString (_Source); text.setPosition (_X, _Y); _App.draw(text);
}

 


Comme on peut le voir je suis obligé de passer explicitement l'adresse de ma fenêtre et ce que j'aimerais c'est de pouvoir obtenir directement celle-ci dans le corps de ma fonction.
Le seul moyen auquel j'ai pensé c'est d'utiliser une variable globale, mais bon c'est pas le top toutefois... donc s'il existe un moyen plus élégant je suis preneur.

Je n'ai commencé à utiliser SFML que très récemment (chapeau bas au développeur par ailleurs) et j'espère ne pas avoir demandé quelque chose de trop évident ici.

Merci d'avance.

Système : Windows XP - 32 bits

Pages: [1]
anything