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

zmienianie widoczności sprite w SFML

VPS Starter Arubacloud
0 głosów
220 wizyt
pytanie zadane 8 stycznia 2017 w C i C++ przez Staszek Gorycki Nowicjusz (170 p.)
Witam. Ostatnio piszę RPG'a. Problem polega na tym, że nie wiem jak zmienić widoczniść/schować sprite.
Na myśli mam to, że trzeba zebrać klucz, żeby otworzyć drzwi. Z góry dzięki za odpowiedzi.

2 odpowiedzi

+1 głos
odpowiedź 8 stycznia 2017 przez playerony Pasjonat (15,240 p.)
wybrane 9 stycznia 2017 przez Staszek Gorycki
 
Najlepsza

Można po prostu przestać go rysować:

if (spriteIsVisible) Window.Draw(twój_sprite);

 

+1 głos
odpowiedź 8 stycznia 2017 przez timrh Mądrala (6,030 p.)

Po prostu zrób klasę, przechowującą informację o aktywności obiektu:
 

class IActivable
{
 bool active;

 public:

 void SetActive(bool active)
 {
  this->active = active;
 }

 bool IsActive()
 {
  return active;
 }
};

A potem dziedziczysz z niej w klasach które mogą być wyłączane lub włączane:

class Door : public IActivable
{
 //kod na drzwi
};

Przechowujesz wszystkie elementy które dziedziczą z IActivable np. w wektorze i sprawdzasz w pętli gry te elementy, ich wartości isActive(), jeśli zwracają true narysuj element.

komentarz 8 stycznia 2017 przez Staszek Gorycki Nowicjusz (170 p.)
Czy mógłbyś mi trochę objaśnić ten kod? Bo z tego co widzę (mogę się mylić) nie ma kodu, który zmienia widoczność klucza. Dzięki za poświęcony czas.
komentarz 8 stycznia 2017 przez criss Mędrzec (172,590 p.)
No nie, nie ma. Możesz wykorzystać ten pomysł na klase razem z rozwiązaniem podsuniętym przez playerony.
komentarz 8 stycznia 2017 przez timrh Mądrala (6,030 p.)

Ja wyjaśniam jak możesz to zrobić aby było łatwo rozszerzalne i wygodne w użyciu.

renderWindow.draw(door);

Zapewne tak rysujesz teraz drzwi. To nie jest wygodne, a przy większej ilości elementów to będzie źle wyglądać. Jeśli dodasz klasę IActivable i będziesz dziedziczyć z niej w każdym elemencie który ma mieć możliwość zmiany aktywności, oraz zrobisz wektor który będzie przechowywać te elementy i będziesz dodawać je z każdym wywołaniem konstruktora IActivable, wtedy możesz zrobić coś takiego:

for(int i=0; i<wektor.size(); i++)
{
 if(wektor[i].IsActive()) 
   {
      //rysujesz dany obiekt, np. rozbudowując klasę o referencję do klasy odpowiadającej za rysowanie, i tutaj się do niej odwołując.
      wektor[i].GetIDrawable().Draw();  
 }
}

 

komentarz 8 stycznia 2017 przez Staszek Gorycki Nowicjusz (170 p.)
Jeśli dobrze zrozumiałem, to z kodu powyżej wynika, żeby wsadzić wszystkie sprite'y do vectora i rysować w pętli for. Tak?
komentarz 8 stycznia 2017 przez timrh Mądrala (6,030 p.)
Pomyśl logicznie, co to wniesie do twojego problemu?
komentarz 8 stycznia 2017 przez timrh Mądrala (6,030 p.)
A tak w ogóle to polecam poznać przynajmniej podstawy programowania obiektowego.
komentarz 8 stycznia 2017 przez Staszek Gorycki Nowicjusz (170 p.)
Dobra zrozumiałem :-) Dzięki za poświęcony czas, a tak wogóle to znam jakieś 3/4 obiektówki :)
komentarz 8 stycznia 2017 przez timrh Mądrala (6,030 p.)
Jeśli pomogłem, oznacz odpowiedź jako najlepszą.
komentarz 8 stycznia 2017 przez criss Mędrzec (172,590 p.)

a tak wogóle to znam jakieś 3/4 obiektówki :)

:D Nie sondze. OOP to przede wszystkim umiejętność myślenia w sposób obiektowy. Sama teoria to zaledwie kilka zasad do zapamiętania. Ćwicz dalej :P

Podobne pytania

0 głosów
2 odpowiedzi 386 wizyt
pytanie zadane 28 grudnia 2016 w C i C++ przez Staszek Gorycki Nowicjusz (170 p.)
0 głosów
1 odpowiedź 205 wizyt
0 głosów
1 odpowiedź 133 wizyt
pytanie zadane 20 marca 2020 w C i C++ przez Kondz10 Początkujący (270 p.)

92,452 zapytań

141,262 odpowiedzi

319,085 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...