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

C++ SFML problem

0 głosów
1,078 wizyt
pytanie zadane 12 listopada 2018 w C i C++ przez Marcin951 Gaduła (3,250 p.)
edycja 12 listopada 2018 przez Marcin951

Witam mam jeden problem z rysowaniem blokow w SFML. Błąd to   E0304 no instance of overloaded function "sf::RenderWindow::draw" matches the argument list a kod wygląda tak w main cpp 

unsigned blocksX{ 8 }, blocksY{ 4 }, blockWidth{ 60 }, blockHeight{ 20 };

	std::vector<block> blocks;

	for (int i = 0; i < blocksY; i++)
	{
		for (int j = 0; j < blocksX; j++) 
		{
			blocks.emplace_back((j + 1) * (blockWidth + 10), (i + 2) * (blockHeight + 5), blockWidth, blockHeight);
		}
	}
		for (auto& block : blocks)
			window.draw(block);

w block h 

#pragma once
#include <SFML/Graphics.hpp>
using namespace sf;
class block :public sf::Drawable
{
public:
    block(float t_X, float t_Y, float t_Width, float t_Height);
    block() = delete;
    ~block()= default;

    void update();
    Vector2f getPostion();

    float left();
    float right();
    float top();
    float bottom();

    bool isDestroyed();
    void destroy();
    Vector2f getSize();

private:
    virtual void draw(sf::RenderTarget& target, sf::RenderStates states) const override;
    RectangleShape shape;
    bool destroyed{ false };
};

block cpp 

#include "block.h"



block::block(float t_X, float t_Y, float t_Width, float t_Height)
{
	shape.setPosition(t_X, t_Y);
	shape.setSize({ t_Width, t_Height });
	shape.setFillColor(Color::Yellow);
	shape.setOrigin(t_Width / 2.f, t_Height / 2.f);
}

void block::draw(RenderTarget& target, RenderStates state) const
{
	target.draw(this->shape, state);
}
float block::left()
{
	return this->shape.getPosition().x - shape.getSize().x / 2.f;
}
float block::right()
{
	return this->shape.getPosition().x + shape.getSize().x / 2.f;
}

float block::top()
{
	return this->shape.getPosition().y - shape.getSize().y / 2.f;
}

float block::bottom()
{
	return this->shape.getPosition().y + shape.getSize().y / 2.f;
}

Vector2f block::getPostion()
{
	return shape.getPosition();
}

bool block::isDestroyed()
{
	return this->destroyed;
}
void block::destroy()
{
	this->destroyed = true;
}
Vector2f block::getSize()
{
	return shape.getSize();
}
void block::update()
{

}

mysle ze takie wycinki kodu wystarcza, a jedyne czego sie domyslam to że problem lezy w vectorze block

komentarz 12 listopada 2018 przez niezalogowany

Wrzuć pełny kod klasy block - może zapomniałeś zdefiniować funkcję draw?

3 odpowiedzi

+1 głos
odpowiedź 12 listopada 2018 przez Eminiox Obywatel (1,500 p.)
wybrane 12 listopada 2018 przez Marcin951
 
Najlepsza
Wywal w block::draw w target.draw() to state i powinno działać.
komentarz 12 listopada 2018 przez Marcin951 Gaduła (3,250 p.)
Dzięki :)
komentarz 12 listopada 2018 przez Eminiox Obywatel (1,500 p.)
Spoko, chodziło o to, że normalnie state ma jakąś wartość domyślną, a przez to, że "przesłoniłeś" tą wartość nie działało, bo tej wartości nie było ((widow.draw(block)).
+1 głos
odpowiedź 12 listopada 2018 przez RafalS VIP (122,780 p.)
przywrócone 12 listopada 2018 przez RafalS
O ile Twoja klasa block nie dziedziczy po drawable lub vertexbuffer to nic z tego.

Odsyłam do dokumentacji:

https://www.sfml-dev.org/documentation/2.5.0/classsf_1_1RenderWindow.php
komentarz 12 listopada 2018 przez Marcin951 Gaduła (3,250 p.)

chodzi o to? 

class block :public sf::Drawable

 

+1 głos
odpowiedź 12 listopada 2018 przez Maciej Złotorowicz Gaduła (4,230 p.)
draw może narysować jedynie jeżeli cos jest "drawable";
 https://www.sfml-dev.org/documentation/2.5.1/classsf_1_1Drawable.php
Ewentualnie można stworzyć funkcje draw w klasie z argumentem będącym wskaźnikiem na RenderWindow
void Draw(RenderWindow & A)

Podobne pytania

+3 głosów
0 odpowiedzi 347 wizyt
+5 głosów
1 odpowiedź 1,631 wizyt
pytanie zadane 28 lipca 2018 w Nasze projekty przez C☺ndzi Stary wyjadacz (12,100 p.)
0 głosów
1 odpowiedź 394 wizyt
pytanie zadane 27 sierpnia 2017 w C i C++ przez Artur Koniec Gaduła (3,680 p.)

93,762 zapytań

142,717 odpowiedzi

323,368 komentarzy

63,359 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.

...