HTML5 Canvas Cvičení 6 Z8144 Počítačová grafika v kartografii Jaro 2020 Filip Leitner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Rozvrh Základy Canvas CANVAS vs SVG Kreslení Canvas Canvas Path Interaktivita v Canvas Domácí úkol Rozvrh Filip Leitner HTML5 Canvas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Rozvrh Základy Canvas CANVAS vs SVG Kreslení Canvas Canvas Path Interaktivita v Canvas Domácí úkol Ukázky HTML Canvas Ukázky HTML Canvas Ukázky HTML Canvas http://www.effectgames.com/demos/canvascycle/ http://www.sinuousgame.com/ https://lab.hakim.se/trail/03/ http://kennethjorgensen.com/blog/2014/canvas-trees – zmáčkněte F5 https://mario5.florian-rappl.de/#menu Filip Leitner HTML5 Canvas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Rozvrh Základy Canvas CANVAS vs SVG Kreslení Canvas Canvas Path Interaktivita v Canvas Domácí úkol Ukázky HTML Canvas Ukázky HTML Canvas Mapy taktiež https://openlayers.org/ https://leafletjs.com/ ... https://www.google.sk/maps ... Filip Leitner HTML5 Canvas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Rozvrh Základy Canvas CANVAS vs SVG Kreslení Canvas Canvas Path Interaktivita v Canvas Domácí úkol Definice Canvas CANVAS vs SVG. Kde je rozdiel CANVAS slúži na vykresľovanie rastrovej grafiky(bitmapa) Obsah je menej flexibilný - je nutné počítať s rozlíšením pre dosiahnutie dobrej kvality Nepodporuje event handlery na úrovni elementov (po vykreslená v podstate nevieme čo a kam sme vykreslili) Je vhodnejší (rýchlejší) na prácu s väčším množstvom elemntov Obsah je možné meniť len pomocou skriptu Obsah je možné exportovať ako png alebo jpeg Filip Leitner HTML5 Canvas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Rozvrh Základy Canvas CANVAS vs SVG Kreslení Canvas Canvas Path Interaktivita v Canvas Domácí úkol Definice Canvas Definice Canvas const DRAW_CANVAS = document.getElementById("draw"); Filip Leitner HTML5 Canvas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Rozvrh Základy Canvas CANVAS vs SVG Kreslení Canvas Canvas Path Interaktivita v Canvas Domácí úkol Obdélníky Barvy – fill, stroke Clear Reference Kreslení Canvas const DRAW_CANVAS = document.getElementById("draw"); const DRAW_CONTEXT = DRAW_CANVAS.getContext("2d"); DRAW_CONTEXT.fillRect(25, 25, 200, 60); Filip Leitner HTML5 Canvas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Rozvrh Základy Canvas CANVAS vs SVG Kreslení Canvas Canvas Path Interaktivita v Canvas Domácí úkol Obdélníky Barvy – fill, stroke Clear Reference .getContext("2d")? A co 3d? Filip Leitner HTML5 Canvas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Rozvrh Základy Canvas CANVAS vs SVG Kreslení Canvas Canvas Path Interaktivita v Canvas Domácí úkol Obdélníky Barvy – fill, stroke Clear Reference .getContext("2d")? A co 3d? → WebGL Filip Leitner HTML5 Canvas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Rozvrh Základy Canvas CANVAS vs SVG Kreslení Canvas Canvas Path Interaktivita v Canvas Domácí úkol Obdélníky Barvy – fill, stroke Clear Reference .getContext("2d")? A co 3d? → WebGL Trochu jiný vesmír … Filip Leitner HTML5 Canvas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Rozvrh Základy Canvas CANVAS vs SVG Kreslení Canvas Canvas Path Interaktivita v Canvas Domácí úkol Obdélníky Barvy – fill, stroke Clear Reference Obdélníky DRAW_CONTEXT.rect(x, y, width, height) DRAW_CONTEXT.fillRect(x, y, width, height) DRAW_CONTEXT.strokeRect(x, y, width, height) DRAW_CONTEXT.clearRect(x, y, width, height) Filip Leitner HTML5 Canvas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Rozvrh Základy Canvas CANVAS vs SVG Kreslení Canvas Canvas Path Interaktivita v Canvas Domácí úkol Obdélníky Barvy – fill, stroke Clear Reference Barvy – fill, stroke DRAW_CONTEXT.fillStyle = "#rrggbb"; DRAW_CONTEXT.strokeStyle = "#rrggbb"; Nastaví barvy pro další kreslení. Filip Leitner HTML5 Canvas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Rozvrh Základy Canvas CANVAS vs SVG Kreslení Canvas Canvas Path Interaktivita v Canvas Domácí úkol Obdélníky Barvy – fill, stroke Clear Reference Fill – příklad const DRAW_CANVAS = document.getElementById("draw"); const DRAW_CONTEXT = DRAW_CANVAS.getContext("2d"); DRAW_CONTEXT.fillStyle = "#ff0000"; DRAW_CONTEXT.fillRect(25, 25, 200, 60); Filip Leitner HTML5 Canvas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Rozvrh Základy Canvas CANVAS vs SVG Kreslení Canvas Canvas Path Interaktivita v Canvas Domácí úkol Obdélníky Barvy – fill, stroke Clear Reference Stroke – příklad const DRAW_CANVAS = document.getElementById("draw"); const DRAW_CONTEXT = DRAW_CANVAS.getContext("2d"); DRAW_CONTEXT.strokeStyle = "#00ff00"; DRAW_CONTEXT.strokeRect(25, 25, 200, 60); Filip Leitner HTML5 Canvas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Rozvrh Základy Canvas CANVAS vs SVG Kreslení Canvas Canvas Path Interaktivita v Canvas Domácí úkol Obdélníky Barvy – fill, stroke Clear Reference Clear const DRAW_CANVAS = document.getElementById("draw"); const DRAW_CONTEXT = DRAW_CANVAS.getContext("2d"); DRAW_CONTEXT.fillStyle = "#ff0000"; DRAW_CONTEXT.fillRect(25, 25, 200, 60); DRAW_CONTEXT.clearRect(50, 50, 75, 75); Filip Leitner HTML5 Canvas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Rozvrh Základy Canvas CANVAS vs SVG Kreslení Canvas Canvas Path Interaktivita v Canvas Domácí úkol Obdélníky Barvy – fill, stroke Clear Reference Reference http://www.w3schools.com/tags/ref_canvas.asp http://diveintohtml5.info/canvas.html Filip Leitner HTML5 Canvas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Rozvrh Základy Canvas CANVAS vs SVG Kreslení Canvas Canvas Path Interaktivita v Canvas Domácí úkol beginPath Kruh 1. úkol 1. úkol Canvas Path fill() stroke() beginPath() moveTo() closePath() lineTo() clip() quadraticCurveTo() bezierCurveTo() arc() arcTo() isPointInPath() Filip Leitner HTML5 Canvas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Rozvrh Základy Canvas CANVAS vs SVG Kreslení Canvas Canvas Path Interaktivita v Canvas Domácí úkol beginPath Kruh 1. úkol 1. úkol beginPath https://www.w3schools.com/tags/canvas_beginpath.asp const DRAW_CANVAS = document.getElementById("draw"); const DRAW_CONTEXT = DRAW_CANVAS.getContext("2d"); DRAW_CONTEXT.beginPath(); DRAW_CONTEXT.lineWidth="5"; DRAW_CONTEXT.strokeStyle="green"; DRAW_CONTEXT.moveTo(0,75); DRAW_CONTEXT.lineTo(200,75); DRAW_CONTEXT.stroke(); DRAW_CONTEXT.beginPath(); DRAW_CONTEXT.strokeStyle="purple"; DRAW_CONTEXT.moveTo(50,0); DRAW_CONTEXT.lineTo(50,110); DRAW_CONTEXT.stroke(); Filip Leitner HTML5 Canvas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Rozvrh Základy Canvas CANVAS vs SVG Kreslení Canvas Canvas Path Interaktivita v Canvas Domácí úkol beginPath Kruh 1. úkol 1. úkol Kruh const DRAW_CANVAS = document.getElementById("draw"); const DRAW_CONTEXT = DRAW_CANVAS.getContext("2d"); const CX = DRAW_CANVAS.width / 2; const CY = DRAW_CANVAS.height / 2; const R = 70; DRAW_CONTEXT.beginPath(); DRAW_CONTEXT.arc(CX, CY, R, 0, 2 * Math.PI, false); DRAW_CONTEXT.lineWidth = 3; DRAW_CONTEXT.strokeStyle = '#000000'; DRAW_CONTEXT.stroke(); DRAW_CONTEXT.fillStyle = 'green'; DRAW_CONTEXT.fill(); Filip Leitner HTML5 Canvas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Rozvrh Základy Canvas CANVAS vs SVG Kreslení Canvas Canvas Path Interaktivita v Canvas Domácí úkol beginPath Kruh 1. úkol 1. úkol 1. úkol Nakreslete sněhuláka v canvas. Filip Leitner HTML5 Canvas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Rozvrh Základy Canvas CANVAS vs SVG Kreslení Canvas Canvas Path Interaktivita v Canvas Domácí úkol beginPath Kruh 1. úkol 1. úkol 1. úkol - ukážka riešenia https://gist.github.com/FilipLeitner/ 9aae1ade55e3c3c5a6e94aa57bb23cab Filip Leitner HTML5 Canvas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Rozvrh Základy Canvas CANVAS vs SVG Kreslení Canvas Canvas Path Interaktivita v Canvas Domácí úkol Click eventy 2. úkol 2. úkol 2. úkol – bonus Click eventy Bez nadstavieb napríklad v podobe knižnice možné len na úrovni canvas containeru const DRAW_CANVAS = document.getElementById("draw"); DRAW_CANVAS.addEventListener('click', function(evt) { ^^Ialert(`${evt.offsetX} ${evt.offsetY}`); }); Pokud byste potřebovali podporovat starší prohlížeče, dopručuji tento návod: http://www.quirksmode.org/js/events_properties.html#position Filip Leitner HTML5 Canvas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Rozvrh Základy Canvas CANVAS vs SVG Kreslení Canvas Canvas Path Interaktivita v Canvas Domácí úkol Click eventy 2. úkol 2. úkol 2. úkol – bonus 2. úkol V canvas vytvořte bílou plochu Po kliknutí do plochy se v ní objeví červený kruh s orámováním na pozici myši Odevzdejte do týdne (4. 5. 4:00) do odevzdávárny „Cvičenie 5 – priebežné“ Filip Leitner HTML5 Canvas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Rozvrh Základy Canvas CANVAS vs SVG Kreslení Canvas Canvas Path Interaktivita v Canvas Domácí úkol Click eventy 2. úkol 2. úkol 2. úkol – bonus 2. úkol - tipy Ak sa súradnice canvasu nezačínajú v rovnakom bode ako súrdanice dokumetu odsadenie získate pomocu: const CANVAS_BOX = CANVAS.getBoundingClientRect(); Ak chcete zmeniť, už vykreslené elementy je nutné kompletné prekreslenie Filip Leitner HTML5 Canvas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Rozvrh Základy Canvas CANVAS vs SVG Kreslení Canvas Canvas Path Interaktivita v Canvas Domácí úkol Click eventy 2. úkol 2. úkol 2. úkol – bonus 2. úkol – bonus V canvas vytvořte bílou plochu Po kliknutí do plochy se v ní objeví červený kruh s orámováním na pozici myši V ploše zůstane zobrazeno maximálně 5 kruhů, starší budou postupně blednout Filip Leitner HTML5 Canvas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Rozvrh Základy Canvas CANVAS vs SVG Kreslení Canvas Canvas Path Interaktivita v Canvas Domácí úkol 3. úkol 3. úkol Vytvořte 2 verze hry “Tic Tac Toe” (piškvorky 3x3) Jedna z těchto verzí bude v SVG (+JS) a druhá v HTML5 canvas (+JS) Pravidla viz http://en.wikipedia.org/wiki/Tic-tac-toe Hra rozpozná konec a zobrazí výsledek: výhra O, výhra X, remíza Hra nemusí obsahovat „umělou inteligenci“. V tomto případě se „hráči“ střídají. (Jednou po kliknutí křížek, jednou kolečko). Použijte co nejvíce společného JS kódu. 3 týdny na vypracování – 16. 5. 4:00 možno získat až 60 bodů úkol odevzdávejte jako archiv .zip Filip Leitner HTML5 Canvas Díky za pozornost! . . . . . . . . . . . . . . . . . . . .