Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Canvas Мерцание изображения. (https://javascript.ru/forum/misc/37860-canvas-mercanie-izobrazheniya.html)

Severtain 11.05.2013 16:35

Canvas Мерцание изображения.
 
Здравствуйте! Начал делать маленькую игру и столкнулся с проблемой... изображение сильно дергается.
Вот ссылка: http://site.lighst.com/Risk/Index.htm
Я использовал для зацикливания :

window.requestAnimFrame = (function(){
return window.requestAnimationFrame/1 ||
window.webkitRequestAnimationFrame/1 ||
window.mozRequestAnimationFrame/1 ||
window.oRequestAnimationFrame/1 ||
window.msRequestAnimationFrame/1 ||
function( callback ){
window.setTimeout(callback, 1000 / 30.0);
};
})();

А для проверки (стабилизации) передвижения небольшую временную функцию :
if (((new Date).getTime()-Timer)/1000>0.005)

Кто встречался с такими проблемами, и как это исправить? Заранее спасибо :) С меня плюсы за хорошие ответы.

danik.js 11.05.2013 17:12

Епт, а зачем функцию делить на единицу? КАК МОЖНО до такого додуматься???

alert(    window.alert / 1     )


window.requestAnimFrame = (function(){
return window.requestAnimationFrame || 
window.webkitRequestAnimationFrame || 
window.mozRequestAnimationFrame || 
window.oRequestAnimationFrame || 
window.msRequestAnimationFrame || 
function( callback ){
window.setTimeout(callback, 1000 / 30.0);
};
})();


И вобще, по шапке бы настучать тому человеку, кто распространил этот сниппет. Нужно создавать не глобальное свойство, а локальную переменную. Но впринципе сойдет и так.

Severtain 11.05.2013 17:16

Штуку с единицей добавил я, это было давно и не помню почему..то ли в браузерах разный фпс выдавало то ли еще, что то

Severtain 11.05.2013 17:19

Вот в чем дело, вставил я ваш код и фпс поднялся до 60. А подергивания так и не прошли.
Заметил, что они возникают переодически и в основном в первые 10-15 секунд после запуска кода.
Ничего нагроможденного у меня в коде нету, чтобы могло вызвать такой эффект.

ruslan_mart 11.05.2013 17:32

Цитата:

Сообщение от danik.js
alert(    window.alert / 1     )

:lol:
На ноль бы делил сразу :haha:

Severtain 11.05.2013 17:42

Через Хром нашел провал во времени, между двумя событиями очень большой промежуток времени пустую, сами по себе события выполняются сразу, с чем это может быть связанно?

dmitriymar 11.05.2013 17:44

Цитата:

Сообщение от Severtain
от в чем дело, вставил я ваш код и фпс поднялся до 60. А подергивания так и не прошли.

вывод очевидный . частота кадров 60 глазу не заметна.
60 и дёргается - в природе такого быть не может, кроме одной ситуации, но здесь её нет

dmitriymar 11.05.2013 17:45

в упор 60 не вижу. 19-29 вижу. и это вполне нормально что на частоте 30 дёрганье видно
Цитата:

Сообщение от Severtain
Вот в чем дело, вставил я ваш код и фпс поднялся до 60.

интересно как могло до 60 подняться с этим?
Цитата:

Сообщение от Severtain
window.setTimeout(callback, 1000 / 30.0);

1000/30 = 30 ну и время на отрисовку и выходит в среднем 25 кадров

Severtain 11.05.2013 17:48

dmitriymar,
Я уже кидал ссылку на игру, и как описал сообщением выше, я заметил, что есть временной провал между выполнениями функций (программа спит). Может кто нибудь сталкивался с этим, или есть компиляторы проверяющие потерю производительности?

Severtain 11.05.2013 17:49

dmitriymar,
на любой частоте, я уже менял и 30 и 60 и 120. только в определенные этапы тормозит.


Часовой пояс GMT +3, время: 11:23.