Drawing the Tile
We will use drawImage()
to
place the new tile on the screen on each iteration:
context
.
drawImage
(
tileSheet
,
sourceX
,
sourceY
,
32
,
32
,
50
,
50
,
32
,
32
);
Here, we are passing the calculated sourceX
and sourceY
values into the drawImage()
function. We then pass in the
width (32
), the height (32
), and the location (50,50
) to draw the image on the canvas. Example 4-5 shows the full code.
Example 4-5. Advanced sprite animation
var
tileSheet
=
new
Image
();
tileSheet
.
addEventListener
(
'load'
,
eventSheetLoaded
,
false
);
tileSheet
.
src
=
"tanks_sheet.png"
;
var
animationFrames
=
[
1
,
2
,
3
,
4
,
5
,
6
,
7
,
8
];
var
frameIndex
=
0
;
function
eventSheetLoaded
()
{
startUp
();
}
function
drawScreen
()
{
//draw a background so we can see the Canvas edges
context
.
fillStyle
=
"#aaaaaa"
;
context
.
fillRect
(
0
,
0
,
500
,
500
);
var
sourceX
=
Math
.
floor
(
animationFrames
[
frameIndex
]
%
8
)
*
32
;
var
sourceY
=
Math
.
floor
(
animationFrames
[
frameIndex
]
/
8
)
*
32
;
context
.
drawImage
(
tileSheet
,
sourceX
,
sourceY
,
32
,
32
,
50
,
50
,
32
,
32
);
frameIndex
++
;
if
(
frameIndex
==
animationFrames
.
length
)
{
frameIndex
=
0
;
}
}
function
startUp
(){
gameLoop
();
}
function
gameLoop
()
{
window
.
setTimeout
(
gameLoop
,
100
);
drawScreen
();
}
When we run the example, we will see the eight tile cell frames for the tank run in order and then repeat—the only problem is that the tank isn’t going anywhere. Let’s solve that little dilemma next and drive the tank up the screen.
Get HTML5 Canvas, 2nd Edition now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.