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. только в определенные этапы тормозит.

dmitriymar 11.05.2013 17:51

Цитата:

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

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

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

со 120 смешно . в анимешен фрейме больше 60 быть не может

Severtain 11.05.2013 17:56

dmitriymar,
Странно, ладно спасибо, попробую каким то образом плавнее сделать этот процесс :)

dmitriymar 11.05.2013 18:01

Цитата:

Сообщение от dmitriymar
со 120 смешно . в анимешен фрейме больше 60 быть не может

Был месяц -2 назад вебминар по мему майкрософтовский и там рассматривался вопрос, что чаще чем 60 срабатывать не может в браузерах

qwerty-клавиатура 11.05.2013 18:36

браузер вешает


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