SFML - "migający" element.

0

Witam, to mój pierwszy post więc proszę o wyrozumiałość jeśli wszystko zrobię źle :P

Na studiach dostaliśmy świąteczne zadanie narysowania za pomocą SFML'a choinki z bombkami i światełkami.
Wszystko jest ładnie narysowane, ale nie mam pojęcia jak zrobić efekt mrygających światełek.
Na ćwiczeniach była mowa coś o poleceniu "usleep", ale niestety facet nie skończył wątku bo ktoś go zawołał czy coś..

Próbowałem kombinować z nieskończonymi pętlami, w których non stop rysują się elementy, a na początku jest usleep(100000);, ale to wgl. nie działało tak jakbym chciał.
Zaznaczę, że programować zacząłem dopiero w październiku na studiach więc ogarniam tyle ile do tej pory zdążyłem się nauczyć :)

Z góry dzięki za pomoc ^^

0

Odpal w tle wątek odpowiedzialny za zmianę stanu wszystkich światełek.
Wzorce projektowe do tego zadania: Pyłek, maszyna stanów
Niezbędne elementy biblioteki standardowej: <thread>, <chrono>

0

@up: wątpię, żeby to mieli robić na wątkach.

Najprostsze rozwiązanie z wykorzystaniem sleepa:

while(true)
{
     a) rysuj choinkę, prezenty itd.
     b) rysuj każde światełko z bieżącym kolorem światełka
     c) sleep
     d) zmień bieżący kolor światełka
}
0
Marszal napisał(a):

@up: wątpię, żeby to mieli robić na wątkach.

Najprostsze rozwiązanie z wykorzystaniem sleepa:

while(true)
{
     a) rysuj choinkę, prezenty itd.
     b) rysuj każde światełko z bieżącym kolorem światełka
     c) sleep
     d) zmień bieżący kolor światełka
}

I mróź całą aplikację;
Zostaje jeszcze symulowanie timera, coś jak timer.addTime(ellapsedTime)

0

Mrożenie całej aplikacji nie jest najlepsze bo to chyba będzie zatrzymywać i wznawiać muzykę cały czas. W tle leci sobie melodyjka.
Jeśli jednak to nie będzie miało wpływu na muzykę, to ten sposób jak najbardziej będzie ok

0

Jeśli masz kolor światełek określony za pomocy sf::Color to zerknij tutaj http://www.sfml-dev.org/documentation/2.2/classsf_1_1Clock.php i przeczytaj o:

  • getElapsedTime ()
  • restart ()

Następnie możesz zwiększać kolor światełek płynnie dodając / odejmując upływ czasu. W ten sposób uzyskasz płynnie migotanie niezależnie od prędkość cpu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1