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

SFML rysowanie kwadratu poprzez klase

Object Storage Arubacloud
0 głosów
270 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 (212,670 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ź 160 wizyt
pytanie zadane 28 lutego 2020 w HTML i CSS przez BlackCat_ Początkujący (310 p.)
0 głosów
0 odpowiedzi 1,372 wizyt
pytanie zadane 18 lipca 2016 w JavaScript przez Alterwar Dyskutant (7,650 p.)
0 głosów
0 odpowiedzi 300 wizyt
pytanie zadane 29 czerwca 2020 w C i C++ przez oski. eskimoski Początkujący (380 p.)

92,568 zapytań

141,422 odpowiedzi

319,638 komentarzy

61,957 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!

...