140 likes | 249 Views
Programming games. Drawing on canvas. Homework: [Complete coin toss examples.] Do your own drawings. Upload files to website. HTML5 drawing on canvas. canvas is a new type of element drawing is done using what is termed the 2d context of a drawing element
E N D
Programming games Drawing on canvas. Homework: [Complete coin toss examples.] Do your own drawings. Upload files to website.
HTML5 drawing on canvas • canvas is a new type of element • drawing is done using what is termed the 2d context of a drawing element • This requires statement done AFTER the body is loaded • can draw rectangles, paths (lines and arcs), images, text, and image from a video! • can also display video element directly.
Screen geometry • Origin is upper left corner!!!! • units are pixels (very small) • Sometimes the terms top or y is used for vertical • vertical values increase going down the screen • Sometimes the terms left or x is used for horizontal • horizontal values increase going to the right. • Screen geometry holds for Flash and Processing and some, though not all, programming languages/environments.
Drawings • Default color is black. • Drawing done for stroke versus fill. • Colors are set using • names (for 16 specific colorshttp://www.tutorialspoint.com/html5/html5_color_names.htm. • red-green-blue values, each as numbers 0 to 255 • hexadecimal
500,0,default color,20 by 20, fill 0,0, default color, 10 by 10, stroke rgb(200,0,100) 0,300,green,30 by 30, stroke 500,300, 50 by 50, fill
<!DOCTYPE html> <html> <head> <title>Four rectangles</title> <script> var ctx; function init() { ctx = document.getElementById('canvas').getContext('2d'); ctx.lineWidth = 2; ctx.strokeRect(0,0,10,10); ctx.fillRect(500,0,20,20); ctx.strokeStyle = "green"; ctx.fillStyle = "rgb(200,0,100)"; ctx.strokeRect(0,300,30,30); ctx.fillRect(500,300,50,50); } </script> </head> <body onLoad="init();"> <canvas id="canvas" width="600" height="400"> Your browser doesn't support the HTML5 element canvas.</canvas> </body> </html>
Classwork Do this now even if you haven't finished the coin toss programs. • After you get my example working, change it! • Put rectangles of different sizes in different places. • Change colors. Confirm that your code does what you intended.
Errors • JavaScript is scripting language: interpret statements at execution time. • NOT compiled, with error messages • Semantic errors (errors of meaning) are more difficult to detect and fix! • Syntactic errors are errors of form, analogous to grammatical errors • FireFox Tools/Error Console can help • Most common: bad bracketing • ctx.fillStyle("rgb(200,0,100)"); fillStyle is attribute,not method
Comments • The drawing is done by the init function which is called when the body element is loaded. The canvas element with id="canvas" does not exist until the body is loaded. • if there was more than one canvas element, we would use different names for the ids. • Default color is black. Red green blue values each are 0 to 255 (8 bits of intensity). The strokeStyle and the fillStyle are attributes, not methods. • GO: experiment with colors (by name) and rgb (note the quotation marks) and location and width and height.
More comments • Drawings are …paint on the canvas. • These rectangles are not objects to be moved or referenced later. • Use ctx.clearRect method to erase. • Need to do calculations to detect hits. • See memory game in book. • Alternative is dynamic placement of html markup • See quiz, hangman.
Reading code: sketch <html> <head> <title> Stuff </title> <script> var ctx; function init() { ctx = document.getElementById('canvas').getContext('2d'); ctx.lineWidth = 10; ctx.fillStyle = "green"; ctx.fillRect(500,10,150,300); ctx.strokeStyle = "pink"; ctx.strokeRect(10,320,650,30); } </script> </head> <body onLoad="init();"> <canvas id="canvas" width="900" height="600"> Your browser doesn't support the HTML5 element canvas.</canvas> </body> </html>
Images var himg = new Image(); himg.src = "head.jpg"; var timg = new Image(); timg.src = "tail.jpg"; … ctx.drawImage(himg,100,200, 60,60); //or if you set x, y, w, h variables set appropriately drawImage(himg, x, y, w, h);
Classwork / homework • [Finish basic coin toss, biased coin.] • Practice drawings (your drawings). • Preview (more in next class): coin toss drawing images on canvas. • Saving it as new file, change your basic coin toss to draw images on the canvas. • consult tutorial. • You can do this. You can look at other examples. Look online for help. • The logic is pretty much the same. • The body element needs to hold a canvas element and a button element. The script element sets the ctx variable.