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

question-closed SFML - problem z oknem

Object Storage Arubacloud
0 głosów
394 wizyt
pytanie zadane 2 listopada 2016 w C i C++ przez L33TT12 Gaduła (3,950 p.)
zamknięte 2 listopada 2016 przez L33TT12
Hejka, jestem w trakcie pisania gry typu Arkanoid, problem w tym, iż gdy przytrzymam uchwyt okna po czym puszcze go po x czasie, to piłka poruszy się tak jakby minęło x czasu + w dodatku omija przeszkody co jest trochę uciążliwe. Próbowałem rozwiązać to w sposób, gdy myszka wyjdzie poza okno to metoda piłki do poruszania się, się nie aktywuje, ale nawet to nie podziałało, może ktoś kiedyś spotkał się z podobnym problemem i mógłby mnie nakierować co należy zrobić?
komentarz zamknięcia: Rozwiązane

3 odpowiedzi

0 głosów
odpowiedź 2 listopada 2016 przez Patrycjerz Mędrzec (192,320 p.)
Kompensuj sobie dłuższy czas obiegu pętli kilkukrotną aktualizacją, tzn. zastosuj pętlę stałokrokową. Stwórz sobie akumulator czasu i odświeżaj grę taką ilość razy, ile wynosi wynik dzielenia całkowitego zawartości akumulatora przez czas pojedynczego kroku.

Na przykład dla kroku wynoszącego 10 milisekund i czasu pętli wynoszącego 1005 milisekund ilość aktualizacji wyniesie 100, zaś te 5 milisekund pozostanie i poczeka na kolejne zapełnienie akumulatora do wielokrotności 10 milisekund.
komentarz 2 listopada 2016 przez draghan VIP (106,230 p.)
Myślę że problem jest innej natury. Autor chciałby pauzować rozgrywkę, kiedy przesuwa okno z grą, tak przynajmniej ja to zrozumiałem.
komentarz 2 listopada 2016 przez criss Mędrzec (172,590 p.)
edycja 2 listopada 2016 przez criss

Autor chciałby pauzować rozgrywkę, kiedy przesuwa okno z grą, tak przynajmniej ja to zrozumiałem.

Tak, ale Patrycjerz szuka rozwiązania problemu z powodu którego autor chce to zrobić :P

 @L33TT12 - Zobacz ten temat: 
http://forum.pasja-informatyki.pl/146066/petla-stalokrokowa-gry 

i koniecznie przeczytaj to (również podlinkowane w powyższym temacie):
http://gafferongames.com/game-physics/fix-your-timestep/

komentarz 2 listopada 2016 przez Patrycjerz Mędrzec (192,320 p.)
Wg mnie właśnie nie, gdyż sam doświadczałem podobnych problemów z SFML. Tak naprawdę z jego pytania nie można jednoznacznie stwierdzić, kto z nas ma rację, więc ja pozostawię tę kwestię do rozwiązania autorowi pytania.
komentarz 2 listopada 2016 przez L33TT12 Gaduła (3,950 p.)

Autor chciałby pauzować rozgrywkę

Właśnie o to mi chodziło. 


Spróbowałem dodatkowo z pętlą stałokrokową ale niestety bez efektów. 

komentarz 2 listopada 2016 przez Patrycjerz Mędrzec (192,320 p.)
Z tego, co wiem, w SFML nie istnieje zdarzenie do określania, czy naciskasz myszą na okno czy też nie. Musiałbyś się pewnie posiłkować systemowym API.
komentarz 2 listopada 2016 przez criss Mędrzec (172,590 p.)
Jeśli naciśniesz myszką poza okno, to straci ono focus, a na to już jest event.
komentarz 2 listopada 2016 przez draghan VIP (106,230 p.)

Kombinowałbym coś z eventami okna, ewentualnie z focusem. Z tym, że nie znalazłem pasującego eventu do przesuwania okna, a samo przesuwanie okna nie powoduje utraty focusu.

Spójrz na ten wątek, ktoś znalazł chyba pewne obejście problemu.

0 głosów
odpowiedź 2 listopada 2016 przez JAKUBW Nałogowiec (33,470 p.)
Prościej: utwórz osobny wątek do poruszania oraz sprawdzania kolizji, który będzie niezależny od wątku rysującego, który zatrzymuje się, gdy trzymasz uchwyt okna.
0 głosów
odpowiedź 2 listopada 2016 przez L33TT12 Gaduła (3,950 p.)
edycja 2 listopada 2016 przez L33TT12

Dziękuje wszystkim za pomoc, aczkolwiek znalazłem dość prymitywne ale działające rozwiązanie.
 

if (mouse.y <= 0 && mouse.y >= -33 && mouse.x > 0 && mouse.x < WINDOW_X)	
playing = false;
else playing = true;

Co prawda jest pauza zawsze jak myszka wejdzie na uchwyt okna, ale lepsze to niż opisywany błąd.(Próbowałem dodać dodatkowo warunek jeśli przycisk myszki jest kliknięty, ale błąd nadal pozostawał)

komentarz 2 listopada 2016 przez draghan VIP (106,230 p.)
A co, jeśli belka tytułowa będzie miała inną wysokość niż Twoja?

Próbowałeś wrzucić obsługę okna do osobnego wątku, jak w linku, który podrzuciłem?

Podobne pytania

0 głosów
1 odpowiedź 705 wizyt
pytanie zadane 26 maja 2015 w C i C++ przez majkkel Użytkownik (530 p.)
0 głosów
1 odpowiedź 1,109 wizyt
pytanie zadane 23 maja 2016 w C i C++ przez Michał Muzyka Pasjonat (24,080 p.)
+1 głos
0 odpowiedzi 438 wizyt
pytanie zadane 20 listopada 2018 w Sprzęt komputerowy przez smokolisz Mądrala (6,340 p.)

92,579 zapytań

141,432 odpowiedzi

319,664 komentarzy

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

...