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

[SFML] Globalny obiekt sf::Window

Ostatnio zmodyfikowano 2012-09-05 20:47
Autor Wiadomość
diego997
Temat założony przez niniejszego użytkownika
» 2012-09-04 22:19:53
dzięki ale jak tak robię to wykakuje błąd po skompilowaniu

Unhandled exception...
P-64385
ison
» 2012-09-04 22:29:09
to zdebuguj
P-64386
yoogi
» 2012-09-05 16:37:53
Nie wiem czy o to ci chodzi, ale zrób sobie wskaźnik globalny i potem zalokuj dane;

C/C++
sf::Window w;

...
w = new Window( sf::VideoMode( 640, 480 ) );
P-64405
RazzorFlame
» 2012-09-05 17:57:56
LOL po co?
Czaj
C/C++
//main.cpp
#include "main.h"

sf::Window window;

int main()
{
    window.Create( sf::VideoMode( 800, 600, 32 ), "Okienko" );
    //...
   
}
C/C++
//main.h
#include <SFML/Graphics.hpp>

extern sf::Window window;

//...
C/C++
//player.h
#include "main.h"
//...
//Mozesz juz te "window" wykorzystywać
P-64408
akwes
» 2012-09-05 19:04:21
@yoogi
nie

po co wskaźnik, skoro może być zwykła zmienna.
(No i w kodzie Ci wcięło gwiazdkę ;>)

@RazzorFlame
NIE!


//Mozesz juz te "window" wykorzystywać

Nie, nie może, ponieważ obiekt zyska swoje wartości dopiero w funkcji main. A jeżeli go użyje w konstruktorze (albo innej funkcji) klasy, i konstruktor (albo inna funkcja) będzie wywołany przed linijką
window.Create( sf::VideoMode( 800, 600, 32 ), "Okienko" );
 to otrzyma właśnie błąd albo w dobrym przypadku będzie rzucony wyjątek.

I jeżeli przyjdzie mu zrobić inny obiekt globalny.

C/C++
class CGraph
{
    // ...
} Graph;

Jeżeli ta klasa będzie próbować odczytać chociażby rozmiar okna, to będzie bagno.




P-64414
diego997
Temat założony przez niniejszego użytkownika
» 2012-09-05 20:25:49
Sprawdzałem wasz propozycje i tak jak pisze @awkes za każdym razem wyskakuje błąd.

Mam jeszcze pytanie jak tworzę zmienną globalną to nie ma znaczenia czy jest ona przed include "Player.h" czy za ?
P-64423
waxx
» 2012-09-05 20:30:07
ale sie pierdzielicie

C/C++
//header
class CDrawInterface {
public:
    sf::RenderWindow Window;
   
   
    CDrawInterface() { }
   
    static CDrawInterface * Instance()
    {
        if( !m_instance )
             m_instance = new CDrawInterface;
       
        return m_instance;
    }
   
   
private:
    static CDrawInterface * m_instance;
   
   
   
};

//source file
CDrawInterface * CDrawInterface::m_instance = 0;

//użycie - player.cpp
#include "CDrawInterface.h"

void CPlayer::Draw()
{
    CDrawInterface::Instance()->Window.Draw( sprite );
}

ofc trzeba tam gdzies indziej jeszcze stworzyc to okno w inicie gry albo co :P

P-64424
diego997
Temat założony przez niniejszego użytkownika
» 2012-09-05 20:47:55
dzieki waxx dziala
P-64426
1 « 2 »
Poprzednia strona Strona 2 z 2