canvas animation
Приветствую!
Пытаюсь рисовать изображения в canvas, используя координаты полученные с сервера. собственно отрисовка происходит как-то так:
function draw()
{
canvas.drawImage(image,myObject.x,myObject.y);
requestAnimationFrame(draw);
}
а координаты обновляются так:
function onmessage(data) {
var packet = JSON.parse(data.data);
myObject.x = packet.x;
myObject.y= packet.y
}
То есть получается, что эти процессы(отрисовки и обновления) не связаны между собой. И вроде бы все должно быть хорошо, ведь координаты с сервера присылаются примерно каждые семнадцать секунд, вот только анимация движения все равно дергается... видимо я не правильно понимаю алгоритм отрисовки изображений по координатам, полученным с сервера. Может кто-нибудь подскажет, где у меня ошибка?) Спасибо. |
может дело в задержке ответа сервера?
|
лаги есть даже на локальной машине. и как тогда модифицировать алгоритм отрисовки, что бы их не было
|
Цитата:
так и должно быть - координаты то вы не с течением времени изменяете, а сразу ставите конечные :D Цитата:
function onmessage(data) {
var packet = JSON.parse(data.data);
myObject.x = packet.x;
myObject.y= packet.y
// и всё зашибись
}
нет, надо изменять эти координаты с течением времени. в учебнике есть хорошая статья на эту тему http://learn.javascript.ru/js-animation ещё при анимации на канвасе нужно сначала очищать область, где был элемент - иначе он там и останется. после этого изменять координаты, и только после этого отрисовывать текущее состояние. |
Цитата:
Цитата:
то есть фактически метод draw надо переделать как-то так?
var last=0;
function draw() {
var progress = (new Date - last)
canvas.drawImage(image,myObject.x*progress,myObject.y*progress);
last = new Date;
}
Спасибо. |
по моему так нужно
запоминаем старые координаты xold yold получаем новые x y то есть расстояние будет x-xold y-yold и дальше плавно его проходим за сколько то итераций допустим 10
for(var i=0;i<10;i++)render(i);
function render(i){
ctx.clearRect(w,h);//очищаем canvas
ctx.drawImage(image,xold+(x-xold)/10*i,yold+(y-yold)/10*i)
}
|
Цитата:
|
Цитата:
а здесь гдето еще надо setTimeout вставить
var i=0
function render(){
ctx.clearRect(w,h);//очищаем canvas
ctx.drawImage(image,xold+(x-xold)/10*i,yold+(y-yold)/10*i);
i++;if(i<10)setTimeout(render,100);
}
|
А разве такой метод для игры например подходит?
Цитата:
|
Цитата:
|
| Часовой пояс GMT +3, время: 22:13. |