[Canvas] Optymalizacja kodu obracającego koło z kulkami |
[Canvas] Optymalizacja kodu obracającego koło z kulkami |
27.03.2014, 22:33:35
Post
#1
|
|
Grupa: Zarejestrowani Postów: 10 Pomógł: 0 Dołączył: 9.10.2010 Ostrzeżenie: (0%) |
Witajcie,
piszę w canvas grę na systemy mobilne korzystając z Apache Cordova. Mam na planszy koło puste w środku, taki jakby pierścień, w którym są kulki. Gdy gracz kliknie na dowolną kulkę i zacznie przesuwać myszkę (lub palcem po ekranie), to koło razem z kulkami ma się obracać, podążać za palcem/myszą. Już napisałem kod za to odpowiedzialny, wszystko działa idealnie, ale niestety tylko na kompie. Komórka nie nadąża i przy szybkim obracaniu jest bardzo duży brak płynności. Mój kod działa tak: gdy wykryjemy ruch myszy/palca przy wciśniętej myszy, pobieramy współrzędne dotknięcia/myszy i obliczamy kąt. następnie rysujemy w canvasie tło, aby zmazać poprzednie kule, po czym rysujemy kule od nowa, ale zaczynając od wyliczonego kąta. Nawet zmodyfikowałem kod w ten sposób, żeby kąty zokrąglać do pełnych stopni, i kulki są renderowane co 1 stopień. Ale dalej nie jest płynnie, da się to jeszcze jakoś zoptymalizować, bo już nie mam pomysłu? Mam nadzieję, że jednak uda się to z Cordovą, bo nauka natywnego programowania to kolejna książka do przeczytania :/ |
|
|
27.03.2014, 23:56:43
Post
#2
|
|
Grupa: Zarejestrowani Postów: 717 Pomógł: 120 Dołączył: 18.04.2009 Ostrzeżenie: (0%) |
możesz wrzucić cały kod odpowiedzialny za obsluge eventów, zmazywanie i rysowanie tarczy i kulek?
Ten post edytował PrinceOfPersia 27.03.2014, 23:57:08 -------------------- |
|
|
28.03.2014, 00:03:58
Post
#3
|
|
Grupa: Zarejestrowani Postów: 10 Pomógł: 0 Dołączył: 9.10.2010 Ostrzeżenie: (0%) |
|
|
|
3.04.2014, 18:38:18
Post
#4
|
|
Grupa: Zarejestrowani Postów: 205 Pomógł: 43 Dołączył: 5.03.2012 Ostrzeżenie: (0%) |
Moje sugestie są takie:
- "zcacheować" pewne zmienne, które są obliczane przy każdym wykonaniu funkcji lub wielokrotnie podczas jednego wykonania, czyli np, zamiast pisać:
To napisać zmienne:
I używać tych zmiennych bezpośrednio w kodzie, później. Druga sprawa, unikać "if" -ów. Czyli zamiast pisać:
To napisać instrukcje łączne:
Co do funkcji trygonometrycznych: można spróbować używać tablic trygonometrycznych, możliwe, że taka optymalizacja coś da. W ostateczności warto spróbować, więcej do poczytania w temacie http://jfdube.wordpress.com/2011/12/06/tri...bles-revisited/ To prawdopodobnie i tak nie wiele da. W ostateczności można by spróbować stworzyć jakiś mechanizm, który reaguje na zdarzenia w regularnych odstępach czasu. Wtedy myślę, że aplikacja troche by skakała ale nie chodziła powoli. |
|
|
3.04.2014, 19:08:52
Post
#5
|
|
Grupa: Zarejestrowani Postów: 589 Pomógł: 91 Dołączył: 22.05.2008 Skąd: Gliwice Ostrzeżenie: (0%) |
Optymalizacja dla rysowanie na canvasie która może dać dużo ale nie prosto coś takiego zrobić.
Podziel cały ekran na jakieś fragmenty i przerysowuj jedynie te fragmenty ekranu na których wystąpiła zmiana. Generalnie samo rysowanie jest najbardziej obciążające. Możesz wrzucić gdzieś kod live? -------------------- Moja gra - scraby.io
|
|
|
Wersja Lo-Fi | Aktualny czas: 3.05.2024 - 00:47 |