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

[SFML] Problem z rozpisywaniem na klasy.

0 głosów
569 wizyt
pytanie zadane 28 sierpnia 2016 w C i C++ przez Kosmaty205 Początkujący (340 p.)

Problem mam z

mWindow(sf::VideoMode(640, 480), "Gra");

Wyskakuje mi błąd "term does not evaluate to a function taking 1 arguments". Robię wszystko jak w książce, a jak zwykle coś idzie nie tak. Jeśli ktoś ma jakiś pomysł, to śmiało. Z góry dziękuję :)

I na koniec jeszcze kod:

#include <SFML\Graphics.hpp>
#include <SFML\System.hpp>
#include <iostream>

using namespace std;

class Game 
{
public:
	Game();        
	void run();
private:    
	void processEvents();			
	void update();					
	void render();					
protected:        
	sf::RenderWindow mWindow;        
	sf::CircleShape  mPlayer;
};

Game::Game()
{
	mWindow(sf::VideoMode(640, 480), "Gra");
	
	mPlayer.setRadius(40.f);
	mPlayer.setPosition(100.f, 100.f);
	mPlayer.setFillColor(sf::Color::Green);
}

 

komentarz 28 sierpnia 2016 przez adrian313 Bywalec (2,850 p.)
jaka książka?
komentarz 28 sierpnia 2016 przez Kosmaty205 Początkujący (340 p.)
SFML Game Develop, rozdział 1 :D

2 odpowiedzi

+2 głosów
odpowiedź 28 sierpnia 2016 przez JAKUBW Nałogowiec (33,470 p.)
wybrane 28 sierpnia 2016 przez Kosmaty205
 
Najlepsza

Musisz użyć metody create

mWindow.create(sf::VideoMode(640, 480), "Gra");

 

komentarz 28 sierpnia 2016 przez Kosmaty205 Początkujący (340 p.)
Dziękuję, wszystko już śmiga! :D
komentarz 28 sierpnia 2016 przez Patrycjerz Mędrzec (192,320 p.)
Konstruktora używa się jedynie przy deklaracji obiektu.
1
komentarz 29 sierpnia 2016 przez Ehlert Ekspert (215,230 p.)
Game::Game()
:
mWindow      (sf::RenderWindow(sf::VideoMode(640, 480), "Gra"))
//i tak dalej
{}

 

0 głosów
odpowiedź 29 sierpnia 2016 przez afferu Mądrala (5,220 p.)

Tak to powinno być...

Inicjalizujesz wszystkich memberów klasy w liście inicjalizacyjnej.

#include <SFML\Graphics.hpp>
#include <SFML\System.hpp>
#include <iostream>
 
using namespace std;
 
class Game 
{
public:
    Game();        
    void run();
private:    
    void processEvents();           
    void update();                  
    void render();                  
protected:        
    sf::RenderWindow mWindow;        
    sf::CircleShape  mPlayer;
};
 
Game::Game()
:  mWindow(sf::VideoMode(640, 480), "Gra");
  ,mPlayer()
{
    mPlayer.setRadius(40.f);
    mPlayer.setPosition(100.f, 100.f);
    mPlayer.setFillColor(sf::Color::Green);
}

 

komentarz 29 sierpnia 2016 przez JAKUBW Nałogowiec (33,470 p.)
Można i tak, ale create wydaje mi się lepszy, gdyż zapewne będzie jeszcze wczytywać grafiki itp. Więc okno powinien stworzyć na końcu konstruktora, aby uniknąć białego ekranu przez ułamek sekundy oraz łatwiej jest ustawić antyaliasing.
komentarz 29 sierpnia 2016 przez afferu Mądrala (5,220 p.)

Wszystkie pola klasy są tworzone zanim jeszcze wejdzie do ciała konstruktora, lista inicjalizacyjna jest po to, aby wywołać wszystkie konstruktory memberów z odpowiednimi parametrami. Jeśli pomijasz zapis listy inicjalizacyjnej, to wywołujesz niejawnie konstruktory domyślne, bez parametrów.

Z twojej odpowiedzi wnioskuję, że nie za bardzo wiesz co robisz, zrób większy research, , poczytaj o budowaniu struktury programu w sfml, polecam ci poczytać jakąś książkę o sfml (nie krytykuje cie).

Inny wariant tworzenia okna poniżej.

#include <SFML\Graphics.hpp>
#include <SFML\System.hpp>
#include <iostream>
 
using namespace std;
 
class Game 
{
public:
    Game();        
    void run();
private:    
    void processEvents();           
    void update();                  
    void render();                  
protected:        
    sf::RenderWindow mWindow;        
    sf::CircleShape  mPlayer;
};
 
Game::Game()
:mWindow()
,mPlayer()
{
    mWindow.create(sf::VideoMode(640, 480), "Gra");
     
    mPlayer.setRadius(40.f);
    mPlayer.setPosition(100.f, 100.f);
    mPlayer.setFillColor(sf::Color::Green);
}

 

komentarz 29 sierpnia 2016 przez JAKUBW Nałogowiec (33,470 p.)

Nie no spoko rozumiem, jestem początkujący więc krytyka się przyda. A poza tym:

Game::Game()
:  mWindow(sf::VideoMode(640, 480), "Gra");
  ,mPlayer()

po nie powinno tu być chyba średnika :)

komentarz 29 sierpnia 2016 przez afferu Mądrala (5,220 p.)
my bad

Podobne pytania

0 głosów
1 odpowiedź 850 wizyt
0 głosów
2 odpowiedzi 811 wizyt
pytanie zadane 12 marca 2018 w C i C++ przez programkamil Początkujący (270 p.)
0 głosów
2 odpowiedzi 1,423 wizyt
pytanie zadane 6 grudnia 2018 w C i C++ przez Rosol Kuba Początkujący (380 p.)

93,731 zapytań

142,669 odpowiedzi

323,286 komentarzy

63,291 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...