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

SFML rysowanie kwadratu poprzez klase

Mały hosting, OGROMNE możliwości
0 głosów
668 wizyt
pytanie zadane 7 listopada 2021 w C i C++ przez Eniggme Nowicjusz (230 p.)

Witam, 

Próbuje zapoznać się z bilbioteką SFML testuje różne rozwiązania i przyszedł czas na klasę i tuta mam problem.
Mianowicie nie wiem jak wywołać rysowanie kwadratu z klasy nie wiem gdzie popełniłem błąd jeśli ktoś mógłby rzucić okiem na mój kod. Szukałem rozwiązań w necie nie wszystkie/wszystko rozumiem stąd też moja decyzja o stworzeniu tego tematu.

 

Main program :

#include <SFML/Graphics.hpp> // blilbio graficzna
#include <SFML/System.hpp>
#include <SFML/Window.hpp>
#include <iostream>
#include "obiekt.h"


const int W=800;
const int S=600;
const int a=40;
const int z=10;

void przesun (float PX, float PY, sf::RectangleShape &obiektdo)
{
        obiektdo.move (PX, PY);
        if (obiektdo.getPosition().x>W)
        {
            obiektdo.setPosition(0,S/2-(a/2));
        }
}


int main()
{
    //Rysowanie okna aplikacji
    sf::RenderWindow oknoAplikacji;
    oknoAplikacji.create( sf::VideoMode( W, S, 32 ), "Wielki projekt a" );

    //Klasa rysujaca kwadrat
    Kwadrata kwa;
    // kwa.kwad();

    // Obrazek
    sf::Texture tekstura;
    tekstura.loadFromFile( "obrazek.bmp" );
    sf::Sprite obrazek;
    obrazek.setTexture( tekstura );
    obrazek.setScale( 1.0, 1.0 );
    obrazek.setOrigin( 20, 20 );
    obrazek.setPosition( 280, 80 );

    // Kwadrat
    sf::RectangleShape kwadrat(sf::Vector2f(a,a));
    kwadrat.setOrigin(kwadrat.getGlobalBounds().width/2,kwadrat.getGlobalBounds().height/2);
    kwadrat.setFillColor(sf::Color::Green);
    kwadrat.setPosition(400,300);

    // Tekst
    sf::Font font;
    font.loadFromFile( "arial.ttf" );
    sf::Text text;
    text.setFont(font);
    text.setString("Zloto :");
    text.setCharacterSize(24);
    text.setColor(sf::Color::Black);
    text.setPosition( 25, 25 );

    while (oknoAplikacji.isOpen())
    {
            przesun(0.01,0, kwadrat);

        if( sf::Keyboard::isKeyPressed( sf::Keyboard::J ) )
        {
            kwadrat.move (0.01*z, 0);
        }

        if( sf::Keyboard::isKeyPressed( sf::Keyboard::Right ) )
        {
            obrazek.move( 1, 0 );
            //obrazek.setScale(1.2, 1.2);
        }
        if( sf::Keyboard::isKeyPressed( sf::Keyboard::Left ) )
        {
            obrazek.move( -1, 0 );
            //obrazek.setScale(0.8, 0.8);
        }
        if( sf::Keyboard::isKeyPressed( sf::Keyboard::Up ) )
        {
            obrazek.move( 0, -1 );
            //obrazek.scale(0.9,0.9);
        }
        if( sf::Keyboard::isKeyPressed( sf::Keyboard::Down ) )
        {
            obrazek.move( 0, 1 );
        }
        if( sf::Keyboard::isKeyPressed( sf::Keyboard::K ) )
        {
            obrazek.rotate( 0.45 ); // Rotacja
            if( sf::Keyboard::isKeyPressed( sf::Keyboard::L ) )
            {
                obrazek.rotate( 0.45*50 );
            }

        }

        sf::Event zdarzenie;
        while( oknoAplikacji.pollEvent( zdarzenie ) )
        {
            if( zdarzenie.type == sf::Event::Closed )
                {
                    oknoAplikacji.close();
                }
            if( zdarzenie.type == sf::Event::KeyPressed && zdarzenie.key.code == sf::Keyboard::Escape )
                {
                    oknoAplikacji.close();
                }
            if( zdarzenie.type == sf::Event::MouseButtonPressed && zdarzenie.mouseButton.button == sf::Mouse::Middle )
                {
                    oknoAplikacji.close();
                }
        }

        oknoAplikacji.clear( sf::Color( 255, 0, 0 ) );
        oknoAplikacji.draw(obrazek);
        oknoAplikacji.draw(text);
        oknoAplikacji.draw(kwadrat);
        oknoAplikacji.draw(kwa); // <- tu mam problem

        oknoAplikacji.display();
    }

    return 0;
}

Klasa

#include <SFML/Graphics.hpp> // blilbio graficzna
#include "obiekt.h"


    kwad(sf::RectangleShape &elo)
    {
            sf::RectangleShape elo(sf::Vector2f(40,40));
            elo.setOrigin(elo.getGlobalBounds().width/2,elo.getGlobalBounds().height/2);
            elo.setFillColor(sf::Color::Black);
            elo.setPosition(200,200);
    }
#include <SFML/Graphics.hpp> // blilbio graficzna

class Kwadrata
{

public:
    kwad();
};

 

Z góry dziękuje. 

1 odpowiedź

0 głosów
odpowiedź 8 listopada 2021 przez Ehlert Ekspert (215,210 p.)
RectangleShape umieść jako pole w klasie Kwadrat, a sama klasa powinna dziedziczyć po sf::Drawable.
komentarz 9 listopada 2021 przez Eniggme Nowicjusz (230 p.)
Przepraszam akurat wczoraj i dzis bylem poza komputerem i nie mialem jak odpisac.
 

Rozumiem kwestia dziedziczenia ale totalnie nie kumam jak umieścić pole w klasie, nie rozumiem tego czy mogę Cię prosić o jakieś nakierowanie :?

Podobne pytania

0 głosów
1 odpowiedź 313 wizyt
pytanie zadane 28 lutego 2020 w HTML i CSS przez BlackCat_ Początkujący (310 p.)
0 głosów
0 odpowiedzi 1,888 wizyt
pytanie zadane 18 lipca 2016 w JavaScript przez Alterwar Dyskutant (7,650 p.)
0 głosów
0 odpowiedzi 676 wizyt
pytanie zadane 29 czerwca 2020 w C i C++ przez oski. eskimoski Początkujący (380 p.)

93,717 zapytań

142,629 odpowiedzi

323,261 komentarzy

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

...