【发布时间】:2014-05-18 18:44:33
【问题描述】:
我想在一张画布上绘制多个图案。我可以使用回调函数加载多个图像,但是当我尝试绘制图案时,什么也没有发生。假设墙壁的图案和屋顶的图案出现在同一张画布上。但是在我的浏览器(mozilla)中打开html,只打开一个空白页。
<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8">
<title> EXAMPLE </title>
</head>
<body>
<canvas id="myCanvas"></canvas>
<script type="text/javascript" src="./jquery.js"></script>
<script type="text/javascript">
$.getJSON("example01.json", function(data) {
var canvas = document.getElementById("myCanvas");
var ctx = canvas.getContext("2d");
canvas.width = data.map.width;
canvas.height = data.map.height;
var count = 0;
for (property in data.map) {
count++;
}
var sources = new Array(count - 2);
var wallExist = data.map.wall.brick;
var roofExist = data.map.roof.tile;
if (typeof (wallExist) != "undefined") {
switch (data.map.wall.brick) {
case "01":
sources[0] = "./brick01.png";
break;
case "02":
sources[0] = "./brick02.png";
break;
}
}
if (typeof (roofExist) != "undefined") {
switch (roofExist) {
case "01" :
sources[1] = "./roof01.png";
case "02" :
sources[1] = "./roof02.png";
}
function loadImages(sources, callback) {
var images = new Array();
var loadedImages = 0;
var numImages = 0;
var patterns = new Array();
for (var src in sources) {
numImages++;
}
for (i = 0; i <= sources.length; i++) {
images[i] = new Image();
images[i].onload = function() {
if (++loadedImages >= numImages) {
callback(images);
}
};
images[i].src = sources[i];
patterns[i] = ctx.createPattern(image[i], "repeat");
}
}
loadImages(sources, function(images) {
ctx.rect(data.map.wall.x_pos, data.map.wall.y_pos, data.map.wall.width, data.map.wall.height);
ctx.fill(pattern[0]);
ctx.rect(data.map.roof.x_pos, data.map.roof.y_pos, data.map.roof.width, dat.map.roof.height);
ctx.fill(pattern[1]);
});
}
});
【问题讨论】:
-
好吧,您已经在 尚未加载的图像上执行
ctx.createPattern。把它放在回调中。
标签: javascript html image canvas