2012-09-03 6 views
5

Może wydawać się to nieszkodliwe, ale gdy robimy to 1000+ razy przy 30 klatkach na sekundę, to się sumuje. Mam 3 rozmiary okręgów, które rysuję, każdy z własnym kolorem wypełnienia (RGBA). Czy szybciej rysuję je jako obrazy raz i używam drawImage() z adresami URL danych, czy też dla każdego z nich mam arc()?Łuk Canvas() kontra drawImage()

Dodatkowe informacje:

  • Używając jednego płótna dla wszystkich środowisk
  • Kontekst i płótno są buforowane
  • Pełna wezwanie do łuku w tej chwili wygląda

    this.scene.context .arc (newLocation, this.y + = this.speed/80, this.distance/2, 0, Math.PI * 2, false);

+0

Jeśli masz już swój kod, można sprawdzić, która wersja jest szybsza w [jsperf] (http://jsperf.com/) – jbalsas

+0

Jeśli w końcu za pomocą metody arc() można zoptymalizować tę linię. np. ustaw kontekst jako zmienną lokalną, jeśli znajduje się w funkcji lub jako zmienną, aby "ta" i "scena" nie musiały być również wyszukiwane i wykonywać obliczenia jeden raz. Np. Var TWOPI = Math.PI * 2 – Richard

Odpowiedz

6

enter image description here

Według my tests, drawImage() będzie znacznie szybciej niż w większości przypadków za pomocą arc().

Funkcja drawImage() może albo element <img> lub <canvas> jako parametru w Firefoksie stosując znacznik <img> była większa, ale inne przeglądarki wykazywały odwrotnie.

Co sprowadza się do: Nawet w przypadku prostych kształtów, użyj drawImage()