# Ściągawka z canvasów i kontekstu 2d
# HTMLCanvasElement
Nas interesują głównie 3 rzeczy:
width i height oraz getContext('2d')
With i height to szerokość i wysokość płótna do rysowania. Żeby nasz obrazek wyglądał estetycznie, chcemy żeby wymiary płótna były równe wymiarom wlwmentu canvas. Dzięki temu obraz będzie ostry.
# style
Wygląd wypełnienia
- kolor i przeźroczystość -
fillStyle
Linie i odbrysy:
- kolor i przeźroczystość -
strokeStyle = kolorhsl[a](H, S, L[, A]), rgba[]() albo po prostyu kolor - szerogość linii -
lineWidth = liczbaSets the width of lines drawn in the future. - kształt końca linii -
lineCap = typ zakończenia liniitypy tobutt,roundisquare, domyślnie jestbutt - kształt łączenia linii -
lineJoin = typ łączenia liniitypy tobevel,roundimiter, domyślnie jestmiter
TIP
miterLimit = valueEstablishes a limit on the miter when two lines join at a sharp angle, to let you control how thick the junction becomes.getLineDash()Returns the current line dash pattern array containing an even number of non-negative numbers.setLineDash(segments)Sets the current line dash pattern.lineDashOffset = valueSpecifies where to start a dash array on a line.
# rysowanie
# rysowanie prostokątów
Można zrobić z prostokątem 3 rzeczy:
- narysować -
strokeRect(x, y, szerokość, wysokość) - wypełnić -
fillRect(x, y, szerokość, wysokość) - wygumkować -
clearRect(x, y, szerokość, wysokość)
# czyszczenie płótna
Używamy clearRect(x, y, szerokość, wysokość) ustawonego na całe płótno.
# rysowanie linii
- zgłaszamy, że będziemy rysowac linię
beginPath() - wybieramy początek
moveTo(x, y) - tworzymy linię dodając kolejne kawałki, na końcu jest instrukcja jak to robić
- możemy zamknąć linię jeśli chcemy,
closePath()naryszuje kreskę od miejsca gdzie skończyliśmy do początku linii (ustawionego funkcją moveTo) - możemy narysować linię metodą
stroke()i/lub wypełnić kształt który otacza metodąfill()
# dodawanie kawałków do linii
- dodanie prostego odcinka
lineTo(x, y) - dodanie kawałka okręgu
ctx.arc(x, y, radius, startAngle, endAngle [, counterclockwise]);- 2 * Math.PI
# jak więc narysowac kółko?
// środek koła
const x = 100
const y = 100
// promień
const r = 50
// kąt początkowy i końcowy
const startAngle = 0
const endAngle = 2 * Math.PI
beginPath()
arc(x,y,r,startAngle,endAngle)
stroke()
# Gotowe funkcje rysjące
# Koło
function circle(ctx, x, y){
ctx.lineWidth = 1;
ctx.strokeColor = "blue";
ctx.beginPath();
ctx.arc(x,y,10,0,Math.PI*2);
ctx.stroke();
}
# periodyczne renderowanie obiektów
Najprościej jest zorbić funkcję którą uruchomimy co jakiś czas i która narysuje wszystko.
setInterval(nazwaFunkcji, liczba ms między uruchomieniami)
(ms to liczba sekund razy 1000)