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

sfml - problem z klasami

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
0 głosów
147 wizyt
pytanie zadane 22 lipca 2023 w C i C++ przez Rais3n Nowicjusz (160 p.)

Cześć, mam mały problem. Mianowicie byłem w trakcie tworzenia arcanoida z youtube'a tyle, że w pewnym momencie efekt przestał być identyczny z tym co było na filmie. Chciałem by na środku okienka wyświetlił się biały okrąg, ale nic się nie pokazuje i okno jest całe czarne. Osobiście mi to wygląda jakby program nie czytał pliku Ball.cpp, jednak nie wiedziałem co miałbym zrobić z tym i tak. Pracuje w Visual Studio

#pragma once
#include <SFML/Graphics.hpp>
using namespace sf;

class Ball : public sf::Drawable //inherits the shape
{
public:
	Ball(float t_x,float t_y);
	Ball()=delete; //more about in internet
	~Ball()=default;
private:
	CircleShape shape;
	const float ballRadius{ 10.0f };
	void draw(RenderTarget& target, RenderStates state) const override; //isplays(przekazuje) the object as drawable'
};
#include "Ball.h"

Ball::Ball(float t_x, float t_y) 
{
	shape.setPosition(t_x, t_y);
	shape.setRadius(this->ballRadius);
	shape.setFillColor(Color::White);
	shape.setOrigin(this->ballRadius, this->ballRadius);

}

void Ball::draw(RenderTarget& target, RenderStates state) const
{
	target.draw(this->shape, state);
}
#include <SFML/Graphics.hpp>
#include <SFML/Window.hpp>
#include "Ball.h"

using namespace sf;
using namespace std;

int main()
{
    Ball ball(400, 300);
    RenderWindow window{ VideoMode{800,600},"Arcanoid tutorial" }; 
    window.setFramerateLimit(60); 
    Event event;
    {
        window.clear(Color::Black);
        window.pollEvent(event); 
        window.display();  
        if (event.type == Event::Closed) {
            window.close();
            break;
        }
        window.draw(ball);
    }

    return 0;
}

Nie wiem też czy to ma jakiekolwiek znaczenie, ale przy kompilacji wyświetla mi się takie ostrzeżenie:
1>C:\ProgramFiles\MicrosoftVisualStudio\2022\Enterprise\MSBuild\Microsoft\VC\v170\Microsoft.CppBuild.targets(531,5): warning MSB8028: Katalog pośredni (x64\Debug\) zawiera pliki udostępnione z innego projektu (proba.vcxproj).

komentarz 22 lipca 2023 przez Rais3n Nowicjusz (160 p.)
Okej, znalazłem rozwiązanie.
Wystarczyło przenieść linijkę: "window.display();" na koniec pętli, chociaż wciąż nie rozumiem mechanizmu, dlatego też byłbym wdzięczny gdyby ktoś to wytłumaczył.
komentarz 22 lipca 2023 przez jankustosz1 Nałogowiec (36,960 p.)
Czego nie rozumiesz?

window.clear(Color::Black); maluje obraz w buforze na czarny
window.display();  kopiuje bufor co w praktyce wyświetla go w oknie
 window.draw(ball); rysujesz piłkę w buforze

Jak przeniosłeś display na koniec to wyświetlasz w oknie stan bufora już po narysowaniu piłki
komentarz 22 lipca 2023 przez Rais3n Nowicjusz (160 p.)
a dobra już chyyyba rozumiem.
piłka mi się nie pokazywała, bo użyłem funkcji narysuj, ale bez wyświetlenia jej tak?
komentarz 22 lipca 2023 przez Oscar Nałogowiec (29,360 p.)
Użyłeś funkcji narysuj ale już po wyświetleniu okienka - rysowanie nie odbywa się bezpośrednio na ekranie tylko w takim "buforze", który potem sam kopiujesz na ekran.

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
1 odpowiedź 415 wizyt
pytanie zadane 12 stycznia 2020 w C i C++ przez Dawid_1900 Nowicjusz (210 p.)
0 głosów
2 odpowiedzi 168 wizyt
pytanie zadane 1 maja 2019 w C i C++ przez NEFOS Początkujący (320 p.)
0 głosów
1 odpowiedź 522 wizyt
pytanie zadane 11 września 2018 w C i C++ przez oliwzcak12 Użytkownik (550 p.)

93,439 zapytań

142,431 odpowiedzi

322,674 komentarzy

62,802 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

...