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

Wyświetlanie grafiki w oddzielnej funkcji SFML

Ostatnio zmodyfikowano 2019-11-19 16:23
Autor Wiadomość
ziomek_680
Temat założony przez niniejszego użytkownika
Wyświetlanie grafiki w oddzielnej funkcji SFML
» 2019-11-09 20:20:06
Podczas proby kompliacji tego kodu kompilator wyrzuca taki bład:
'oknoAplikacji' was not declared in this scope
C/C++
#include <SFML/Graphics.hpp>
#include <iostream>

void wyswietl();

int main()
{
    // Rzeczy wykonywane przy starcie programu
    sf::RenderWindow oknoAplikacji( sf::VideoMode( 600, 600, 32 ), "Saper" );
    while( oknoAplikacji.isOpen() ) // G³owna petla programu
    {
        sf::Event zdarzenie;
        while( oknoAplikacji.pollEvent( zdarzenie ) )
        {
            if( zdarzenie.type == sf::Event::Closed )
                 oknoAplikacji.close();
           
        }
        wyswietl();
    }
}

void wyswietl()
{
    oknoAplikacji.clear( sf::Color( 255, 0, 0 ) ); //Bład dotyczy tej linijki
    oknoAplikacji.display();
}
P-175503
pekfos
» 2019-11-09 20:31:28
Próbujesz się odwołać do zmiennej lokalnej z innej funkcji. SFML nie ma nic do rzeczy, coś takiego nigdy nie zadziała. Musisz przekazać okno do funkcji jako argument (przez referencję).
P-175505
ziomek_680
Temat założony przez niniejszego użytkownika
» 2019-11-09 20:40:22
Dobra przekazanie obiektu do funkcji rozwiazalo problem.
Myślałem ze obiekty sa globalne i mozna operowac na nich wszędzie.
Dzieki za rozwianie wątpliwosci.
P-175506
pekfos
» 2019-11-09 20:51:25
Myślałem ze obiekty sa globalne i mozna operowac na nich wszędzie.
Są w C++ zmienne globalne, ale nie należy ich używać bez powodu. Gdyby wszystkie zmienne były globalne, nie dało by się programować przez ciągłe konflikty nazw i trudne do przewidzenia zachowanie kodu.
P-175507
RazzorFlame
» 2019-11-14 11:06:42
Tutaj dodam też (dla potomnych), że utworzenie okna (typu RenderWindow) lub tekstury globalnie powoduje naruszenie dostępu pamięci, prawdopodobnie przez to, że w samym kodzie wewnątrz SFMLa zmienne globalne są używane w nieprzemyślany sposób.
P-175570
pekfos
» 2019-11-16 22:08:25
utworzenie okna (typu RenderWindow) lub tekstury globalnie powoduje naruszenie dostępu pamięci, prawdopodobnie przez to, że w samym kodzie wewnątrz SFMLa zmienne globalne są używane w nieprzemyślany sposób.
Wspomniane klasy pośrednio korzystają ze zmiennych globalnych w SFMLu, więc tworzenie ich obiektów jako zmiennych globalnych jest błędne, jako że kolejność tworzenia zmiennych globalnych jest nieokreślona. Jeśli naprawdę jest powód używać globalnego okna czy tekstur, to można użyć singletonu. W SFMLu pewnie też można by było to zrobić i nie byłoby problemu z globalnymi obiektami - dlaczego tak tego nie zrobili, to już powinno być pytanie do nich.

Po wyeliminowaniu zmiennych globalnych z
https://github.com/SFML/SFML​/blob/master/src/SFML/Window​/GlContext.cpp
https://github.com/SFML/SFML​/blob/master/src/SFML/Window​/Win32/WglContext.cpp#L43
https://github.com/SFML/SFML​/blob/master/src/SFML/Graphics​/RenderTarget.cpp#L56
działa z globalnie utworzonym sf::RenderWindow. Testować sf::Texture już mi się nie chciało :)
P-175589
RazzorFlame
» 2019-11-19 16:23:58
Elegancko :) No właśnie, tak jak mówiłem - nie przemyśleli chyba tego.
P-175610
« 1 »
  Strona 1 z 1