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

Zmiana koloru przeszkód - flappy bird - gra 2D

Object Storage Arubacloud
0 głosów
144 wizyt
pytanie zadane 3 kwietnia 2020 w C i C++ przez gorgonkowa Obywatel (1,810 p.)

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! :)

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

Podobne pytania

+14 głosów
7 odpowiedzi 867 wizyt
pytanie zadane 8 kwietnia 2017 w Nasze projekty przez 10kw10 Pasjonat (22,880 p.)
0 głosów
2 odpowiedzi 281 wizyt
0 głosów
0 odpowiedzi 314 wizyt
pytanie zadane 23 listopada 2021 w JavaScript przez DzikieHarce Użytkownik (690 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

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

...