• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Sfml Plik .exe szykbo się zamyka

Object Storage Arubacloud
0 głosów
302 wizyt
pytanie zadane 25 sierpnia 2015 w C i C++ przez patryk16 Obywatel (1,080 p.)
Gdy aktywuje swój program przez plik .exe to on odrazu się zamyka.

Nie wiem czemu.

#include <SFML/Graphics.hpp>
#include <windows.h>
#include <cstdlib>
#include <iostream>
class Object
{
   public:
    sf::Sprite cialo;
    sf::Texture tex;

    Object(int x,int y)
    {
     tex.loadFromFile("Body.png");
     cialo.setTexture(tex);
     cialo.setPosition(x,y);

    }
};

int main()
{
    std::cout<<"Starting"<<std::endl;
Sleep(1000);
system("cls");
 std::cout<<"Starting."<<std::endl;
 Sleep(1000);
system("cls");
 std::cout<<"Starting.."<<std::endl;
 Sleep(1000);
system("cls");
 std::cout<<"Starting..."<<std::endl;

     system("cls");
     std::cout<<"Program dzia³a"<<std::endl;
srand(time(NULL));
    // Create the main window
    sf::RenderWindow app(sf::VideoMode(1024,800), "World of Grubsy");

    // Load a sprite to display
    sf::Texture texture;

    if (!texture.loadFromFile("Body.png"))
        return EXIT_FAILURE;
        std::cout<<"Pomyœlnie otworzono plik"<<std::endl;

sf::Sprite sprite(texture);
sprite.setPosition(200,400);
sf::Sprite tlo;
tlo.setScale(1024,800);

 

    // Start the game loop
    while (app.isOpen())
    {
        // Process events
        sf::Event event;
        while (app.pollEvent(event))
        {
            // Close window : exit
            if (event.type == sf::Event::Closed)
            {
                app.close();
                std::cout<<"Program exit"<<std::endl;
                exit(0);

            }

        }

        // Clear screen
        app.clear();

        // Draw the sprite
        app.draw(sprite);

 

        // Update the window
        app.display();
int kierunek;

Sleep(100);
      kierunek=rand()%4+1;

      switch(kierunek)
      {
      case 1:
         // app.clear();
         if(!(sprite.getPosition().y-5<=tlo.getPosition().y))sprite.move(0,-5);
       // app.display();
        break;
        case 2:
           // app.clear();
        if(!(sprite.getPosition().x-5<=app.getPosition().x))sprite.move(-5,0);
      //  app.display();
        break;
        case 3:
           // app.clear();

 if(!(sprite.getPosition().x-240>=tlo.getScale().x)) sprite.move(5,0);
       // app.display();
        break;
        case 4:
           // app.clear();
         if(!( sprite.getPosition().y>= tlo.getPosition().y+tlo.getScale().y+15))sprite.move(0,5);
       // app.display();
        break;

   }

    }

 

    return EXIT_SUCCESS;

}

3 odpowiedzi

0 głosów
odpowiedź 25 sierpnia 2015 przez Lafoniz Gaduła (4,370 p.)
edycja 25 sierpnia 2015 przez Lafoniz

W niektórych IDE Working Directory jest różny w zależności od tego czy uruchomisz plik wykonywalny poprzez IDE czy też środowisko na którym pracujesz.

Working Directory to ścieżka względem której szuka się innych plików. Jeżeli jest ona ustawiona powiedzmy na: C:/Andzej/Gra, to wpisując w kodzie programu następującą funkcję: sprite.loadFromFile("Gracz.png"), program będzie oczekiwał tego pliku w C:/Andzej/Gra/Gracz.png, nie ma z tym problemów dopóki nie mamy dwóch ścieżek Working Directory

Czasami jeżeli włączysz plik .exe poprzez środowisko, ścieżka ta będzie w folderze z tym plikiem, a jeżeli poprzez IDE, znajdzie się ona w folderze z projektem. 

Problem ten można dwojako rozwiązać:

a) Zmienić w ustawieniach projektu ścieżkę.

b) Skopiować zasoby "do" drugiej ścieżki.

W przypadku Twojego programu, ten kod najprawdopodobniej doprowadza do awarii:

if (!texture.loadFromFile("Body.png"))
        return EXIT_FAILURE;

Osobiście mówiąc, nie polecam takiego sposobu zarządzania błędami.

0 głosów
odpowiedź 25 sierpnia 2015 przez Ehlert Ekspert (212,670 p.)

Jakie IDE? Wstawianie Kodu

0 głosów
odpowiedź 25 sierpnia 2015 przez adrian17 Ekspert (344,860 p.)
Jak powiedział lafoniz, pewnie nie udaje się ładowanie tekstur z pliku.

Przy okazji, nigdy nie pisz exit(0) w C++ie, uniemożliwia to poprawne wykonanie destruktorów - zamiast tego po prostu grzecznie wyjdź z głównej pętli.

Podobne pytania

0 głosów
1 odpowiedź 705 wizyt
pytanie zadane 26 maja 2015 w C i C++ przez majkkel Użytkownik (530 p.)
+1 głos
2 odpowiedzi 522 wizyt
pytanie zadane 25 września 2021 w C i C++ przez DeniS1 Początkujący (410 p.)
0 głosów
2 odpowiedzi 1,443 wizyt
pytanie zadane 26 stycznia 2018 w C i C++ przez loloman123 Nowicjusz (150 p.)

92,576 zapytań

141,426 odpowiedzi

319,650 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...