Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[SFML 2.0] Nie wyświetla obrazka, biały ekran

Ostatnio zmodyfikowano 2012-11-13 22:09
Autor Wiadomość
bingo009
Temat założony przez niniejszego użytkownika
» 2012-11-13 16:21:43
Za to odpowiada klasa Game. W konstruktorze tworzy się okno, a w metodzie StartGame() jest cała logika(i między innymi próba narysowania). Niżej kod konstruktora i tej metody:
C/C++
Game::Game()
    : RenderWindow( VideoMode( 640, 480, 32 ), "XDStory -- Under Construction" )
{ }

int Game::StartGame()
{
    Event event;
    Test * test1 = new Test( "Data/obrazek.bmp" );
    while( isOpen() )
    {
        while( pollEvent( event ) )
        {
            if( event.type == Event::Closed )
                 close();
           
            if( event.type == Event::KeyPressed && event.key.code == Keyboard::Escape ) close();
           
        }
        clear();
        test1->drawTest();
        display();
    }
    return 0;
}

Obiekt tworzony jest tutaj dynamicznie, ale to nie ma nic do rzeczy chyba.
P-69119
DejaVu
» 2012-11-13 16:35:29
Jeżeli bitmapa istnieje to teoretycznie kod, który zamieściłeś powinien działać. Nie widzę bowiem nigdzie wywołania konstruktora kopiującego dla obiektu typu Test, oraz dla obiektu typu sf::Texture.
P-69121
bingo009
Temat założony przez niniejszego użytkownika
» 2012-11-13 16:46:08
Obrazek napewno istnieje, bo jak wywołam metodę draw klay RenderWindow podając jako argument ten obiekt, to działa, no i wiem, że obrazek naprawdę istnieje.

Edit: Dziwna sprawa, bo gra po uruchomieniu pokazuje 2 okna. Jedno z białym erkanem, inne z czarnym. To okno z białym ekranem, jest jakby zablokowane, nie mogę go zamknąć(X na pasku tytułowym), zminimalizować, ani przesunąc. Wykasowanie wywołania metody drawTest rozwiązuje problem.
P-69122
DejaVu
» 2012-11-13 17:08:47
Cóż... coś zdrowo nakopałeś :)
P-69127
bingo009
Temat założony przez niniejszego użytkownika
» 2012-11-13 17:17:00
Cały kod dałem wam, nie mam naprawdę pojęcia co to może być. Poza klasą Object, Test i Game nic nie ma, klasa Object nie ma żadnego obiektu, więc ona niz nie może namieszać. Więc gdzie siedzi błąd?
P-69129
DejaVu
» 2012-11-13 17:45:42
C/C++
#include <SFML/Graphics.hpp>
#include <sstream>
#include <vector>
using namespace sf;

class Game
    : public RenderWindow
{
public:
    Game();
    int StartGame();
    static Game & returnInstance();
   
};

Game::Game()
    : RenderWindow( VideoMode( 640, 480, 32 ), "XDStory -- Under Construction" )
{ }

Game & Game::returnInstance()
{
    static Game instance;
    return instance;
}


class Test
    : public sf::Sprite
{
private:
    sf::Texture tex;
public:
    Test( const char * tex2 );
    void drawTest();
};

Test::Test( const char * tex2 )
{
    tex.loadFromFile( tex2 );
    setTexture( tex );
}

void Test::drawTest()
{
    Game::returnInstance().draw( * this );
}

int Game::StartGame()
{
    Event event;
    Test * test1 = new Test( "img.jpg" );
    while( isOpen() )
    {
        while( pollEvent( event ) )
        {
            if( event.type == Event::Closed )
                 close();
           
            if( event.type == Event::KeyPressed && event.key.code == Keyboard::Escape ) close();
           
        }
        clear();
        test1->drawTest();
        display();
    }
    return 0;
}

int main()
{
    return Game::returnInstance().StartGame();
}
Cóż... skopiowałem Twój kod, zmieniłem nazwę wczytywanego pliku z teksturą i... działa.
P-69137
bingo009
Temat założony przez niniejszego użytkownika
» 2012-11-13 22:09:47
U mnie też zaczęło działać. Jak to zrobiłem? Zmieniłem funckję main, na taką jak jest u ciebie. Miałem tak:
C/C++
#include "Headers.h"


int main()
{
    Game XDStory;
    XDStory.StartGame();
    return 0;
   
}

Dziękuję bardzo za pomoc i poświecony czas. Muszę się jeszcze dużo nauczyć o programowaniu obiektowym.
P-69192
1 « 2 »
Poprzednia strona Strona 2 z 2