Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: [Résolu] Fenetre SFML ne s'affichant pas  (Lu 2218 fois)

0 Membres et 2 Invités sur ce sujet

constructeur06

  • Newbie
  • *
  • Messages: 5
    • Voir le profil
[Résolu] Fenetre SFML ne s'affichant pas
« le: Juin 29, 2013, 12:18:05 pm »
Bonjour,

Dans le but de créer un projet en 2D, j'ai décidé d'utiliser SFML. Donc je lance le programme, aucune erreurs n'apparaissent, la console se lance, la fenêtre du jeu apparait dans la barre Windows, mais lorsque je clique sur cette dernière, impossible de l'afficher à l'écran... Elle ne réagit pas et reste en petit dans la barre Windows.

Nous sommes plusieurs sur ce projet et je suis le seul à rencontrer ce problème, chez les autres tout marche... Le pire c'est que le code source fournit dans le tuto sur le site SFML marche très bien ! La fenêtre avec le fond noire s'ouvre, et j'ai bien un cercle vert au milieu.

J'utilise Code::Blocks 12.11 et SFML TDM 2.0, j'ai tout linké comme il faut, et j'ai pas oublié : "SFML_DYNAMIC".

Si quelqu'un pouvait m'aider, j'en serait ravi... ça fait deux jours que je suis bloqué sur ce problème. J'ai cherché sur Google, et il semble que personne n'a rencontré ce problème.

Voici une partie du code quand même :

main.cpp :


#include <iostream>
#include <cstdio>
#include <string>


#include <SFML/System.hpp>
#include <SFML/Window.hpp>
#include <SFML/Graphics.hpp>

 #include "Engine.hpp"

using namespace std;
using namespace sf;

int main()
{

Engine game(sf::VideoMode(1440, 900, 32));

int exit_code = game.Run();

    return exit_code;
}

 

Engine.cpp :


#include "Engine.hpp"
#include <SFML/Window.hpp>
#include "Player.hpp"

#include <iostream>
#include <sstream>
#include <cmath>

using namespace std;
using namespace sf;

template <typename T> string NumberToString ( T Number )
{
    ostringstream ss;
    ss << Number;
    return ss.str();
}



Engine::Engine(sf::VideoMode Mode)
{
    Game.create(Mode, "Ultra Shooter 0.2");

}

int Engine::Run()
{

    sf::Clock fps_clock;


    player = new Player(sf::Vector2f(200.f, 200.f));

//Game.setVerticalSyncEnabled(true);
    Game.setFramerateLimit(60);
    MainView.setSize(1440, 900);
    MainView.setCenter(1440/2, 900/2);
    Game.setView(MainView);

    IsRunning=true;
    while(IsRunning)
    {

        while(Game.isOpen())//Fenetre
        {


            localMousePosition = sf::Mouse::getPosition(Game);
//Pour la répétition il faut utiliser les lignes ci-dessous.
            if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left))
            {
                player->move(-15.00f, 00.00f);
            }
            if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right))
            {
                player->move(15.00f, 00.00f);
            }
            if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up))
            {
                player->move(0.00f, -15.00f);
            }
            if (sf::Keyboard::isKeyPressed(sf::Keyboard::Down))
            {
                player->move(0.00f, 15.00f);
            }

            if (sf::Mouse::isButtonPressed(sf::Mouse::Left))
            {
                            sf::Vector2f converted_coord;//la position de la souris est en int
                converted_coord.x=(float)localMousePosition.x;//donc on la convertie en float car Player::Shoot(sf::Vector2f, sf::RenderWindow &myRenderWindow)
                converted_coord.y=(float)localMousePosition.y;//sf::Vector2f est en float

                AllBullets.push_back(Bullet(player->getPosition(), player->Shoot(converted_coord, Game)));

            }
//Pour des touches séparées(avec délai du système), il vaut mieux utiliser ces lignes là(pollEvent).
            while (Game.pollEvent(WindowEvent))
            {
                if (WindowEvent.type == Event::Closed)
                {
                    Game.close();
                    IsRunning=false;
                }
                /* else if (WindowEvent.type == Event::MouseMoved)
                 {
                     MousePosition.x=WindowEvent.mouseMove.x;
                     MousePosition.y=WindowEvent.mouseMove.y;
                 }*/

                if (WindowEvent.type == sf::Event::Resized)
                {
                    // on met à jour la vue, avec la nouvelle taille de la fenêtre
                    MainView.setSize(WindowEvent.size.width, WindowEvent.size.height);
                    //sf::FloatRect visibleArea(0, 0, WindowEvent.size.width, WindowEvent.size.height);
                    //Game.setView(sf::View(visibleArea));
                    Game.setView(MainView);
                }
                if (WindowEvent.type == Event::KeyPressed)
                {
                    if (WindowEvent.key.code == sf::Keyboard::Space)
                    {

                        std::cout << "the space key was pressed" << std::endl;
                        std::cout << "control:" << WindowEvent.key.control << std::endl;
                        std::cout << "alt:" << WindowEvent.key.alt << std::endl;
                        std::cout << "shift:" << WindowEvent.key.shift << std::endl;
                        std::cout << "system:" << WindowEvent.key.system << std::endl;
                    }
                }
                if (WindowEvent.type == sf::Event::MouseButtonPressed)
                {
                    if (WindowEvent.mouseButton.button == sf::Mouse::Right)
                    {
                        std::cout << "the right button was pressed" << std::endl;

                    }
                }
                if (WindowEvent.type == sf::Event::MouseWheelMoved)
                {
                    std::cout << "wheel movement: " << WindowEvent.mouseWheel.delta << std::endl;

                }
            }//pollEvent



            Vector2i object_pixel_position=Game.mapCoordsToPixel(player->getPosition(), MainView);
            if(object_pixel_position.x < 100)
            {
                MainView.move(-15.f, 0.f);
                Game.setView(MainView);
            }
            if(object_pixel_position.x > Game.getSize().x-100)//ignorer avertissement de la comparaison entre expressions entières signée et non signée
            {
                MainView.move(15.f, 0.f);
                Game.setView(MainView);
            }
            if(object_pixel_position.y < 100)
            {
                MainView.move(0.f, -15.f);
                Game.setView(MainView);
            }
            if(object_pixel_position.y > Game.getSize().y-100)//ignorer avertissement de la comparaison entre expressions entières signée et non signée
            {
                MainView.move(0.f, 15.f);
                Game.setView(MainView);
            }


                for(unsigned int n=0; n<AllBullets.size(); n++)
            {
               AllBullets.at(n).UpdatePosition();
               if(CheckIfOutOfWindow(AllBullets.at(n).getPosition()) == true)
{
AllBullets.erase(AllBullets.begin()+n);
}

            }



  Game.clear(Color(255,255,255));

            for(unsigned int n=0; n<AllBullets.size(); n++)
            {
                Game.draw(AllBullets.at(n));
            }

            Game.draw(*player);
            Game.display();

            /* float currentTime = fps_clock.restart().asSeconds();
            int fps = static_cast<int> ( 1.f / currentTime);
            string fps_string = NumberToString(fps);
             Game.setTitle("Ultra Shooter 0.2 FPS : "+fps_string);*/


        }
        delete player;
    }

    return 0;
}

bool Engine::CheckIfOutOfWindow(sf::Vector2f Position)
{
    sf::Vector2u window_size=Game.getSize();
    if(     static_cast<unsigned int>(Position.x) < 0             ||
            static_cast<unsigned int>(Position.x) > window_size.x ||
            static_cast<unsigned int>(Position.y) < 0             ||
            static_cast<unsigned int>(Position.y) > window_size.y)
    {

        return true;

    }
    else
    {

        return false;

    }
}


Engine::~Engine()
{
    Game.close();
}


 

Cordialement,

constructeur06
« Modifié: Juin 29, 2013, 04:20:50 pm par constructeur06 »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : [Bug] Fenetre SFML ne s'affichant pas
« Réponse #1 le: Juin 29, 2013, 02:43:59 pm »
Essaye de simplifier ton code à l'extrême, afin de garder uniquement ce qui reproduit le problème.
Laurent Gomila - SFML developer

constructeur06

  • Newbie
  • *
  • Messages: 5
    • Voir le profil
Re : [Bug] Fenetre SFML ne s'affichant pas
« Réponse #2 le: Juin 29, 2013, 03:04:57 pm »
En faisant juste ça j'ai le même problème :

main.cpp


#include <iostream>
#include <cstdio>
#include <string>


#include <SFML/System.hpp>
#include <SFML/Window.hpp>
#include <SFML/Graphics.hpp>

 #include "Engine.hpp"

using namespace std;
using namespace sf;

int main()
{

sf::VideoMode mode(1440, 900, 32);
sf::RenderWindow Game;
Game.create(mode, "Ultra Shooter 0.2");

        while(Game.isOpen())//Fenetre
        {


            Game.display();
        }

//int exit_code = game.Run();

    return 0;
}

 

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : [Bug] Fenetre SFML ne s'affichant pas
« Réponse #3 le: Juin 29, 2013, 03:11:22 pm »
Il faut au moins une boucle d'évènements pour que le programme soit 100% correct.

Ensuite ce serait pratique que tu mettes ce qui est caché derrière la classe Game directement dans ton main(). C'est plus simple à inspecter et à tester.
Laurent Gomila - SFML developer

constructeur06

  • Newbie
  • *
  • Messages: 5
    • Voir le profil
Re : [Bug] Fenetre SFML ne s'affichant pas
« Réponse #4 le: Juin 29, 2013, 03:13:49 pm »
Je crois que j'ai compris ! En changeant la taille de la fenêtre, j'ai plus ce problème ! =)

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : [Résolu] Fenetre SFML ne s'affichant pas
« Réponse #5 le: Juin 29, 2013, 05:03:18 pm »
Ah. La fenêtre était plus grande que le bureau c'est ça ? C'est un comportement connu depuis longtemps, pense à chercher sur le bug tracker la prochaine fois.
Laurent Gomila - SFML developer