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

cpp+sfml+obiekt

Object Storage Arubacloud
0 głosów
217 wizyt
pytanie zadane 5 maja 2019 w C i C++ przez edwardkraweznik Dyskutant (9,930 p.)

witam.

Mam taki oto kod:

 

main.cpp

#include <SFML/Graphics.hpp>

#include "tile.hpp"



int main() {
	

	
    // create the window
    sf::RenderWindow window(sf::VideoMode::getFullscreenModes()[0], "My window", sf::Style::Fullscreen);


	

    // run the program as long as the window is open
    while (window.isOpen())
    {
        // check all the window's events that were triggered since the last iteration of the loop
        sf::Event event;
        while (window.pollEvent(event))
        {
            // "close requested" event: we close the window
            if (event.type == sf::Event::Closed || event.key.code == sf::Keyboard::Escape)
				{
                window.close();
				}
            
                
        }

        // clear the window with black color
        window.clear(sf::Color(150, 220, 255));

        // draw everything here...
        // window.draw(...);



		 sf::View ppp;
		 //iew.zoom(0.5f);
	ppp.setRotation(5.f);
	window.setView(ppp);

	

Tile aaa;
aaa.set(10, 10);
window.draw(aaa);


	



        // end the current frame
        window.display();
    }

    return 0;
}

 

tile.cpp



//----------------------------------------------------------------------
#include <SFML/Graphics.hpp>
#include "tile.hpp"

//----------------------------------------------------------------------
void Tile::set(float x, float y) {
	
		sf::Texture texture;
		texture.loadFromFile("textures/ppp.png");
			
		sf::Sprite sprite;
		sprite.setTexture(texture);
		

		sprite.setPosition( x, y);
		
		}

 

tile.hpp

#ifndef TILE_HPP
#define TILE_HPP


#include <SFML/Graphics.hpp>
class Tile {
	private:
	
	
	public:
	
	
	float x;
	float y;
	
	
	
	
	void set(float x, float y);
		
		
		
		
	};

#endif

 

przy kompilacji wywala mi:

joszi@joszi-MS-7309:~/sfml$ make lin
rm -f *.o
rm -f app
g++ -I ./include/ -c *.cpp
main.cpp: In function ‘int main()’:
main.cpp:50:16: error: no matching function for call to ‘sf::RenderWindow::draw(Tile&)’
 window.draw(aaa);
                ^
In file included from ./include/SFML/Graphics.hpp:45:0,
                 from main.cpp:1:
./include/SFML/Graphics/RenderTarget.hpp:237:10: note: candidate: void sf::RenderTarget::draw(const sf::Drawable&, const sf::RenderStates&)
     void draw(const Drawable& drawable, const RenderStates& states = RenderStates::Default);
          ^~~~
./include/SFML/Graphics/RenderTarget.hpp:237:10: note:   no known conversion for argument 1 from ‘Tile’ to ‘const sf::Drawable&’
./include/SFML/Graphics/RenderTarget.hpp:248:10: note: candidate: void sf::RenderTarget::draw(const sf::Vertex*, std::size_t, sf::PrimitiveType, const sf::RenderStates&)
     void draw(const Vertex* vertices, std::size_t vertexCount,
          ^~~~
./include/SFML/Graphics/RenderTarget.hpp:248:10: note:   candidate expects 4 arguments, 1 provided
./include/SFML/Graphics/RenderTarget.hpp:258:10: note: candidate: void sf::RenderTarget::draw(const sf::VertexBuffer&, const sf::RenderStates&)
     void draw(const VertexBuffer& vertexBuffer, const RenderStates& states = RenderStates::Default);
          ^~~~
./include/SFML/Graphics/RenderTarget.hpp:258:10: note:   no known conversion for argument 1 from ‘Tile’ to ‘const sf::VertexBuffer&’
./include/SFML/Graphics/RenderTarget.hpp:269:10: note: candidate: void sf::RenderTarget::draw(const sf::VertexBuffer&, std::size_t, std::size_t, const sf::RenderStates&)
     void draw(const VertexBuffer& vertexBuffer, std::size_t firstVertex, std::size_t vertexCount, const RenderStates& states = RenderStates::Default);
          ^~~~
./include/SFML/Graphics/RenderTarget.hpp:269:10: note:   candidate expects 4 arguments, 1 provided
Makefile:14: recipe for target 'lin' failed
make: *** [lin] Error 1
joszi@joszi-MS-7309:~/sfml$ 
 

kompiluję z makefile:

plik Makefile:


CC_LIN = g++
INC_LIN = -I ./include/
LIB_LIN = -L ./lib/ -lsfml-graphics -lsfml-window -lsfml-system

CLEAN_OBJ = rm -f *.o
CLEAN_APP = rm -f app

clean:
	$(CLEAN_OBJ)
	$(CLEAN_APP)

lin:
	$(CLEAN_OBJ)
	$(CLEAN_APP)
	
	$(CC_LIN) $(INC_LIN) -c *.cpp
	g++ *.o $(LIB_LIN) -o app
	
	$(CLEAN_OBJ)

co robię źle ?

chciałbym stworzyć sprite jako obiekt i wyświetlić go na ekranie.

1 odpowiedź

0 głosów
odpowiedź 5 maja 2019 przez niezalogowany
wybrane 8 maja 2019 przez edwardkraweznik
 
Najlepsza

Tak na pierwszy rzut oka: Nigdzie nie dziedziczysz po sf::Drawable i nie masz przeciążonej metody draw (zobacz przykład).

komentarz 6 maja 2019 przez niezalogowany
Po co Ci te lokalne obiekty, które zostaną zniszczone po wykonaniu metody?
komentarz 6 maja 2019 przez edwardkraweznik Dyskutant (9,930 p.)
nie wiem, chcę to zrozumieć, nie potrafię tego zrozumieć
komentarz 6 maja 2019 przez niezalogowany

Proponuję powtórzyć sobie dokładniej podstawy programowania jak zasięg zmiennych czy programowanie obiektowe. Inaczej co chwila będziesz miał problem z dosyć banalnymi problemami ;/

komentarz 6 maja 2019 przez edwardkraweznik Dyskutant (9,930 p.)
wiem jak wygląda zasięg zmiennych....

programowanie obiektowe także.

problem mam z funkcjami virtualnymi.

czyli jak mam przesłać koordynaty do obiektu sprite i narysować go w odpowiednim miejscu. a także jak mu załadować odpowiednią texturę

te obiekty będą tworzone dynamicznie(czyli raz ich może być 5 a raz 10, textury także kilka)

mi chodzi aby to zrobić obiektowo (       obiekt.funkcja(x, y, textura); x i y = koordynaty       )

linia po linii wiem jak to zrobić.
komentarz 8 maja 2019 przez edwardkraweznik Dyskutant (9,930 p.)

zrobiłem to tak:

main.cpp

#include <SFML/Graphics.hpp>
#include "tile.hpp"

int main() {
    sf::RenderWindow window(sf::VideoMode::getFullscreenModes()[0], "My window", sf::Style::Fullscreen);

    while (window.isOpen())
    {
        window.clear();

        Tile ppp;
        ppp.set(window);
        
        sf::Event event;
        while (window.pollEvent(event))
        {
            if (event.type == sf::Event::Closed || event.key.code == sf::Keyboard::Escape)
                {
                window.close();
                }
                            
        }

        window.display();
    }

    return 0;
}

tile.hpp

#ifndef TILE_HPP
#define TILE_HPP

#include <SFML/Graphics.hpp>
class Tile {
    private:
    
    public:
    
    
    
    void set(sf::RenderWindow &window);
    
    
    };

#endif

tile.cpp

#include "tile.hpp"

//----------------------------------------------------------------------
void Tile::set(sf::RenderWindow &window) {

    sf::Texture tekstura;
    tekstura.loadFromFile( "textures/ppp.png" );

    sf::Sprite obrazek;
    obrazek.setTexture( tekstura );

    window.draw( obrazek );

        }

Dojdą jeszcze koordynaty kafelka.

Pytanie: jest ok czy coś poprawić ?

Podobne pytania

0 głosów
0 odpowiedzi 255 wizyt
pytanie zadane 19 czerwca 2022 w C i C++ przez hicodyn Początkujący (420 p.)
0 głosów
1 odpowiedź 300 wizyt
pytanie zadane 12 stycznia 2020 w C i C++ przez Dawid_1900 Nowicjusz (210 p.)
0 głosów
2 odpowiedzi 2,478 wizyt
pytanie zadane 20 lipca 2018 w C i C++ przez seba1711g Początkujący (350 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 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!

...