SFML - "migający" element.

Odpowiedz Nowy wątek
2014-12-27 15:56
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 ^^

Pozostało 580 znaków

2014-12-27 18:03
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>

edytowany 1x, ostatnio: spartanPAGE, 2014-12-27 18:04

Pozostało 580 znaków

2014-12-27 20:55
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
}

Pozostało 580 znaków

2014-12-27 20:59
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)

Pozostało 580 znaków

2014-12-28 14:01
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

Muzykę daj w osobnym wątku ;p - Trebuh 2014-12-28 14:22

Pozostało 580 znaków

2014-12-29 00:47
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.


bluszcz

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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