Adjusting the Position
It is time to tie together the triangle we’ve drawn with the code we just added for dealing with the arrow keys. What we are going to do is define two counter variables called deltaX
and deltaY
. What these variables will do is keep a count of how far to move our triangle as a result of arrow key presses. This may sound a bit confusing right now, but hang on tight!
First, let’s go ahead and define our deltaX
and deltaY
variables and put them to use inside our moveSomething
function. Add lines 1-2, 7, 10, 13 and 16 to your code:
var deltaX = 0;var deltaY = 0;function moveSomething(e) {switch(e.keyCode) {case 37:deltaX -= 2;break;case 38:deltaY -= 2;break;case 39:deltaX += 2;break;case 40:deltaY += 2;break;}}
Depending on which arrow key was pressed, either the deltaX
or deltaY
variable will be increased or decreased. These variables changing in isolation has no effect on our triangles. We need to modify our drawTriangle
function to actually use the deltaX
and deltaY
variables. Guess what we are going to do next?
Go ahead and make changes (line 2, 5-7) to the drawTriangle
function:
function drawTriangle() {context.clearRect(0, 0, canvas.width, canvas.height);// the trianglecontext.beginPath();context.moveTo(200 + deltaX, 100 + deltaY);context.lineTo(170 + deltaX, 150 + deltaY);context.lineTo(230 + deltaX, 150 + deltaY);context.closePath();// the outlinecontext.lineWidth = 10;context.strokeStyle = "rgba(102, 102, 102, 1)";context.stroke();// the fill colorcontext.fillStyle = "rgba(255, 204, 0, 1)";context.fill();}
The code changes should be pretty straightforward to make sense of. The call to clearRect
ensures we clear our canvas
before attempting to re-draw our triangle. The additions to the context.moveTo
and context.lineTo
methods take the deltaX
and deltaY
values into account. This ensures our triangle is always drawn with an offset that is determined by the number of times you pressed each arrow key. Putting that last sentence into human terms, this means you can move your triangle around using the keyboard.
At this point, if you preview your page now, our example still won’t work. The reason is because there is one more thing you need to do. We need to call drawTriangle
each time a key is pressed to actually draw our triangle in the new position. To make this happen, go back to the moveSomething
function and add a call to drawTriangle
towards the bottom:
function moveSomething(e) {switch(e.keyCode) {case 37:deltaX -= 2;break;case 38:deltaY -= 2;break;case 39:deltaX += 2;break;case 40:deltaY += 2;break;}drawTriangle();}
Give your canvas
element focus by clicking on the triangle, and then use your arrow keys. You’ll see our triangle moving around the screen!