04.11.2012, 23:31
|
|
√₋̅₁̅
|
|
Регистрация: 18.06.2012
Сообщений: 385
|
|
cyber,
Сперва надо указывать img.onload, затем img.src. Ибо если картинка в кэше браузера, то событие может не отработать.
Хотя иногда и так не отрабатывает. Можно после присвоения img.src дополнительно проверять на img.width и img.height или img.complete. Есть топик на тему предзагрузки на Stack Overflow и простецкий прелоадер на гитхабе.
__________________
Гейзенберг, возможно, читал этот тред.
Последний раз редактировалось Дзен-трансгуманист, 04.11.2012 в 23:41.
|
|
04.11.2012, 23:46
|
|
I am Student
|
|
Регистрация: 17.12.2011
Сообщений: 4,415
|
|
Дзен-трансгуманист,
да все равно таже хрень то один быстрей то другой =(
__________________
Цитата:
|
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
|
|
|
04.11.2012, 23:49
|
|
I am Student
|
|
Регистрация: 17.12.2011
Сообщений: 4,415
|
|
в мозиле явное преимущество варианта c cache.
__________________
Цитата:
|
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
|
|
|
04.11.2012, 23:55
|
|
√₋̅₁̅
|
|
Регистрация: 18.06.2012
Сообщений: 385
|
|
cyber,
Та дождись уже пока все загрузятся - тогда рисуй. Юзеры-то кэш нарочно сбрасывать не будут. При первой загрузке всё что угодно ждать приходится, как ни крути.
__________________
Гейзенберг, возможно, читал этот тред.
|
|
04.11.2012, 23:57
|
|
I am Student
|
|
Регистрация: 17.12.2011
Сообщений: 4,415
|
|
Дзен-трансгуманист, т.е вариант с кэшем лучше?
__________________
Цитата:
|
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
|
|
|
05.11.2012, 00:01
|
|
√₋̅₁̅
|
|
Регистрация: 18.06.2012
Сообщений: 385
|
|
cyber,
С каким кэшем, не понял, браузера, или в скрипте?
В скрипте храни картинки либо в Image, либо рисуй Image на буферный Canvas, и храни там. Откуда рисовать быстрее, с буферной канвы или с Image - не знаю, не мерял, и, думаю, это зависит от браузера. Но присваивать заново один и тот же src точно не нужно: один раз загрузил - и рисуй потом хоть до второго пришествия.
В некоторых случаях без буферной канвы попросту не обойтись.
__________________
Гейзенберг, возможно, читал этот тред.
Последний раз редактировалось Дзен-трансгуманист, 05.11.2012 в 00:06.
|
|
05.11.2012, 00:06
|
|
I am Student
|
|
Регистрация: 17.12.2011
Сообщений: 4,415
|
|
Дзен-трансгуманист,
я про кэш скрипта
var imgCache = loaded[type.bg];
if (!imgCache) {
var img = new Image();
img.src = type.bg;
img.onload = function () {
drawImg.call(this, x, y, width, height);
};
loaded[type.bg] = {
obj: img,
loaded: false
};
img = null;
}
else {
if (imgCache.loaded)
ctx.drawImage(imgCache.obj, x, y, width, height);
else {
if (!imgCache.sub) imgCache.sub = [];
imgCache.sub.push(function () {
ctx.drawImage(imgCache.obj, x, y, width, height);
});
}
}
function drawImg(x,y,width, height) {
loaded[type.bg].loaded = true;
console.log(this);
ctx.drawImage(this, x, y, width, height);
var sub = loaded[type.bg].sub;
for (var i = 0; i < sub.length; i++) sub[i]();
};
работает так:
-если картинки нет в кэше то создать и добавить ее туда свойство ,loaded = false;
- если картинка не загружена , но есть в кэше то в свойство sub (подписка) добавляется функция которая вызовется после загрузки
- если картинка есть в кэше и загружена просто от рисовать
__________________
Цитата:
|
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
|
|
|
05.11.2012, 00:12
|
|
√₋̅₁̅
|
|
Регистрация: 18.06.2012
Сообщений: 385
|
|
cyber,
Я думаю, лучше сначала дождаться, пока загрузится всё что нужно, потом уже начинать рисовать. Это как когда загружаешь сохранение какой-нибудь обычной игры, там еще прогресс-бар как правило есть. Игра не начинается, пока не загрузятся ВСЕ нужные для данной точки игры ресурсы. Иначе бы ты наблюдал, как тысячи серых полигонов постепенно обретают конечную текстуризацию, в то время как по тебе уже палит десяток гангстеров, которых даже не различить. Странно было бы, не так ли?
__________________
Гейзенберг, возможно, читал этот тред.
Последний раз редактировалось Дзен-трансгуманист, 05.11.2012 в 00:15.
|
|
05.11.2012, 00:24
|
|
I am Student
|
|
Регистрация: 17.12.2011
Сообщений: 4,415
|
|
Дзен-трансгуманист,
суть понял , сделал так
if (!imgCache) {
var img = new Image();
imgCache = loaded[type.bg] = {
obj: img,
sub:[]
};
imgCache.sub.push(function () {
ctx.drawImage(imgCache.obj, x, y, width, height);
});
img.onload = function () {
for (var i = 0; i < imgCache.sub.length; i++) imgCache.sub[i]();
};
img.src = type.bg;
img = null;
}
else {
imgCache.sub.push(function () {
ctx.drawImage(imgCache.obj, x, y, width, height);
});
}
спасибо за подсказку.
__________________
Цитата:
|
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
|
Последний раз редактировалось cyber, 05.11.2012 в 00:27.
|
|
|
|