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

Canvas - niektóre obiekty nie zatrzymują się w ostatnim punkcie

Object Storage Arubacloud
0 głosów
153 wizyt
pytanie zadane 13 stycznia 2018 w JavaScript przez Alterwar Dyskutant (7,650 p.)
Witam,

mógłby mi ktoś wytłumaczyć dlaczego przy wywołaniu animacji spadania obiektów, niektóre nie zatrzymują się w ostatnim punkcie i spadają poza canvas?

Tutaj kod:

https://codepen.io/alterwar/pen/PEaLpM

1 odpowiedź

0 głosów
odpowiedź 13 stycznia 2018 przez Schizohatter Nałogowiec (39,600 p.)
wybrane 13 stycznia 2018 przez Alterwar
 
Najlepsza

Ponieważ sprawdzasz, czy osiągnęły one położenie dokładnie zero. Tu jest problem. Bo teraz zależnie od tego gdzie się pojawią i jakie prędkości osiągną szansa, że wpadną idealnie na zero jest ograniczona.

W związku z tym proponuję, żebyś sprawdzał warunek przy pomocy <= (>=), a nie == i ustawiał prędkość na zero oraz ich pozycję na końcową. W ten sposób każdy klocek, który będzie śmiał wylecieć poza ekran zostanie cofnięty. Będzie to niezauważalne.

komentarz 13 stycznia 2018 przez Alterwar Dyskutant (7,650 p.)

Dzięki za odpowiedź :)

if(blocksObject[i].posY >= blocksObject[i].endPositionY){
	blocksObject[i].stop = true;
};

zmieniłem w tym miejscu i śmga :)

komentarz 13 stycznia 2018 przez Alterwar Dyskutant (7,650 p.)
Jeszcze jedno pytanie.

Kod wygląda tak:

https://codepen.io/alterwar/pen/PEaLpM

Jak mogę zastopować animację jeśli wszystkie obiekty spełniają warunek? Bo wydaję mi się ze canelAnimationFrame nie działa, bo dodając console loga cały czas zwraca mi wartośći. Jeśli dodam return true to zatrzyma animację ale od razu przy styknięciu się pierwszych obiektów z zerem więc reszta zawiśnie w powietrzu.
komentarz 15 stycznia 2018 przez Schizohatter Nałogowiec (39,600 p.)
cancelAnimationFrame służy do zupełnie czego innego.

Twoja animacja działa w ten sposób, że wywołujesz klatkę (czyli przesuwasz wszystkie elementy), a następnie wewnątrz tej klatki wywołujesz kolejną klatkę i tak w kółko. I tak jest dobrze, tak się robi.

To, co Ciebie interesuje to postawienie warunku wokół tego kolejnego wywołania klatki, czyli u Ciebie:

`requestAnimationFrame(drawAnimateFall);`

To obtocz warunkiem zatrzymania, a wtedy nie zostanie wywołana nowa klatka i tym samym całość się zakończy.
komentarz 15 stycznia 2018 przez Alterwar Dyskutant (7,650 p.)
edycja 15 stycznia 2018 przez Alterwar
Zrobiłem tablice w której pushuje wszystkie obiekty o fladze stop. Porównuje długość tablicy z ilością stworzonych obiektów. Jeśli nie równe to wywołuje animacje

https://codepen.io/alterwar/pen/PEaLpM

edit:

chociaż jednak jakaś klatka ucieka bo obiekty zatrzymują się parę pikseli przed końcem. Wydaje mi się, że poprawnie jest to zrobione

Podobne pytania

0 głosów
2 odpowiedzi 287 wizyt
pytanie zadane 8 marca 2018 w JavaScript przez Yashe Dyskutant (7,720 p.)
0 głosów
1 odpowiedź 1,317 wizyt
0 głosów
2 odpowiedzi 83 wizyt
pytanie zadane 8 kwietnia w JavaScript przez Infos Użytkownik (650 p.)

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

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

...