JsFiddle (примечание: не показывает ничего, это просто способ для меня, чтобы показать свой код в аккуратном формате) http://jsfiddle.net/h6tVR/Одда ошибки с DrawImage на HTML5 холсте
Я новичок в HTML5 холст и решил играть и посмотреть, что я могу с этим сделать. До сих пор я был в состоянии нарисовать локально размещенное изображение на холст и даже сделать несколько базовой черепицу:
window.onload = function(){
var GameClosure = function() {
var canv = document.getElementById("canv");
var canvContext = canv.getContext("2d");
var sprite = new Image();
sprite.src = "sprite.png"
var tile = new Image();
tile.src = "tile.png"
function loadSprite(){
sprite.onload = function(){
canvContext.drawImage(sprite, 50, 50);
};
}
function loadTiles(){
tile.onload = function(){
for(var i = 0; i < 800; i += 16){
for(var r = 0; r < 608; r += 16){
canvContext.drawImage(tile, i, r);
}
}
};
}
return{
loadTiles: loadTiles,
loadSprite: loadSprite
};
}();
GameClosure.loadTiles();
GameClosure.loadSprite();
}
Я получаю странную проблему с этим. Когда я загружаю его, большую часть времени загружаются только плитки. Я пробовал пару вещей до сих пор, я переключил вызовы GameClosure.loadTiles() and GameClosure.loadSprite();
, чтобы посмотреть, не изменился ли порядок загрузки. Это не так. Я даже попытался создать второй контекст и присвоить плитки одному и спрайту другому, но это не имело никакого значения. Комментируя вызов плитки, вы создаете спрайт правильно.
Это становится еще более странным. Я быстро обновлял страницу, и иногда я замечал это (без шаблона, иногда это может случиться 3 раза подряд, в другой раз один раз в 20), плитки будут загружаться, и спрайт будет загружаться сверху, как я ожидал бы этого к.
Можно ли это исправить? Мое единственное предположение: мой код работает несколько асинхронно, а циклы for, создающие плитки, завершаются после того, как спрайт был загружен, но, глядя на мой код, я не вижу, где это может произойти.
Спасибо. Это объяснение помогло мне понять, что я делаю неправильно. Я изменил свой код, и теперь у меня это работает. – BenM