Hejka!
Chciałabym Was poprosić o małą podpowiedź, co można w kodzie zmienić, żeby uzyskać zmienność kolorów przeszkód - spritów. Kod klasy przedstawia się następująco:
#include "Rura.hpp" // Dołączenie pliku nagłówkowego 'Rura'
#include "DEFINICJE.hpp" // Dołączenie pliku nagłówkowego 'DEFINICJE'
#include <iostream> // Standardowa biblioteka obsługująca operacje wejścia/wyjścia
/// \namespace MPB_BOSS
///
/// \brief To nazwa przestrzeni.
///
///
namespace MPB_BOSS // Nazwa przestrzeni
{
/// \brief Konstruktor głównego menu, posiadający parametr danych gry, o wartości automatycznej przypisanej do referencji danych.
Rura::Rura(StanOdpoczynku dane) : _dane(dane)
{
}
//! Metoda tworzenia dolnych rur.
void Rura::StworzDolnaRure() // Metoda tworzenia dolnych rur
{
/// \brief Klasa obiektów tworząca obiekt zainicjowana w zasobach.
sf::Sprite sprite(this->_dane->zasoby.GetTexture("Rura w gore"));
/// \brief Ustawienie pozycji obiektu
sprite.setPosition(this->_dane->okno.getSize().x, this->_dane->okno.getSize().y - sprite.getLocalBounds().height);
/// \brief Dodaje nowy element obiektu na końcu wektora.
obiektyRur.push_back(sprite); // Dodaje nowy element obiektu na końcu wektora
}
//! Metoda tworzenia górnych rur.
void Rura::StworzGornaRure() // Metoda tworzenia górnych rur
{
/// \class Klasa obiektów tworząca obiekt zainicjowana w zasobach.
sf::Sprite sprite(this->_dane->zasoby.GetTexture("Rura w dol")); // Klasa obiektów tworząca obiekt zainicjowana w zasobach
/// \brief Ustawienie pozycji obiektu.
sprite.setPosition(this->_dane->okno.getSize().x, 0); // Ustawienie pozycji obiektu
/// \brief Dodaje nowy element obiektu na końcu wektora.
obiektyRur.push_back(sprite); // Dodaje nowy element obiektu na końcu wektora
}
//! Metoda tworzenia niewidzialnych rur.
void Rura::StworzNiewidzialnaRure() // Metoda tworzenia niewidzialnych rur
{
/// \class Klasa obiektów tworząca obiekt zainicjowana w zasobach.
sf::Sprite sprite(this->_dane->zasoby.GetTexture("Rura w dol")); // Klasa obiektów tworząca obiekt zainicjowana w zasobach
/// \brief Ustawienie pozycji obiektu.
sprite.setPosition(this->_dane->okno.getSize().x, 0); // Ustawienie pozycji obiektu
/// \brief Ustawienie koloru obiektu.
sprite.setColor(sf::Color(0, 0, 0, 0)); // Ustawienie koloru obiektu
/// \brief Dodaje nowy element obiektu na końcu wektora.
obiektyRur.push_back(sprite); // Dodaje nowy element obiektu na końcu wektora
}
//! Metoda ruszania rurami.
void Rura::RuchRur(float klatka) // Metoda ruszania rurami.
{
/// \brief Zapętlenie rur do momentu, gdy i < długości zwracanego obiektu rury.
for (int i = 0; i < obiektyRur.size(); i++) // Zapętlenie rur do momentu, gdy i < długości zwracanego obiektu rury
{
/// \brief Jeśli pozycja obiektu zwróconej referencji jest odjęta od zwróconej referencji szerokości prostokąta.
if (obiektyRur.at(i).getPosition().x < 0 - obiektyRur.at(i).getLocalBounds().width)
{
/// \brief To rury zostaną usunięte po wyjściu za ekran.
obiektyRur.erase(obiektyRur.begin() + i); // To rury zostaną usunięte po wyjściu za ekran
}
else // W innym wypadku...
{
/// \brief Tworzenie wektora pozycji rury.
sf::Vector2f pozycja = obiektyRur.at(i).getPosition(); // Tworzenie wektora pozycji rury
/// \var ruch Obliczenie szybkości ruchu rur.
float ruch = SZYBKOSC_RUCHU_RUR * klatka; // Obliczenie szybkości ruchu rur
/// \brief Ustawienie i przesunięcie rur w lewo (ponieważ jest minus - oś OX)
obiektyRur.at(i).move(-ruch, 0); // Ustawienie i przesunięcie rur w lewo (ponieważ jest minus - oś OX)
}
}
}
void Rura::RysowanieRur() // Metoda rysująca rury w klasie rur.
{
/// \brief Zapętlenie rur do momentu, gdy i < długości zwracanego obiektu rury.
/// \param i To parametr pozwalający na liczenie długości zwracanego obiektu rur.
/// \param obiektyRur.size() To parametr pozwalający na sprawdzenie obecnego rozmiaru rur.
/// \param i++ Parametr odpowiadający za inkrementację długości w pętli.
for (unsigned short int i = 0; i < obiektyRur.size(); i++) // Zapętlenie rur do momentu, gdy i < długości zwracanego obiektu rury
{
/// \brief Rysowanie rur w oknie.
/// \param i To parametr odwołujący się do obecnej liczby długości obiektu rur do narysowania.
this->_dane->okno.draw(obiektyRur.at(i)); // Rysowanie rur w oknie
}
}
}
Próbowałam zmieniać parametr w pętli, czyli obiektyRur.size() na jakąś konkretną wartość, próbowałam również do tego dać warunek sprawdzający, jednak rury pojawiały się i znikały w połowie ekranu. Podobnie próbowałam ustawić lekką klasę sf::Clock, jednak coś robię nie tak. Czy macie jakieś pomysły, jak to zrobić, żeby po pewnym czasie zmienić kolor rur?
Byłabym MEGA wdzięczna za odpowiedzi! :)