![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: May 2010
Адрес: 55.755786° с.ш. 37.617633° в.д.
Сообщений: 12
|
ничего не понял...
Умножаем на время, при котором не просядет фпс, и получаем время, при котором не просядет фпс. Это как? Может имелось в виду что надо задать какое-то разумное время, а затем в каждом кадре если fpsRatio < 1, то время уменьшать, а если fpsRatio > 1, то увеличивать. Только > 1 быть никак не может, так как targetFps вкомпиливается в swf и чаще рендер производиться не будет. Так что в итоге операции будут работать по пиковой загрузке (обеспеченной не только флешом, но и другими программами). Хотя конечно можно и при fpsRatio = 1 увеличивать... Тогда флешка по идее будет всегда работать при слегка присевшем фпс, но зато не будет больших проседаний. |
|
|||||
|
Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
|
Цитата:
Объясняю последний раз: В самом начале у нас есть тормозная функция megaCalculation( timeLimit:uint ), которая принимает время в мс, которое она должна отпахать, и не более. В самом начале у нас есть targetFps = 30 В самом начале у нас есть расчетное_время, скажем 33мс на кадр (из расчета 1000мс / 30фпс) У нас есть счетчик фпс Каждый кадр мы узнаем отношение fpsRatio как currentFps / targetFps И после этого вызываем мегаТормозную функцию как megaCalculation( fpsRatio * расчетное_время ) расчетное_время - "Умножаем на время, при котором не просядет фпс" fpsRatio - "Умножаем" fpsRatio * расчетное_время - "и получаем время, при котором не просядет фпс" Еще вопросы есть? Последний раз редактировалось i.o.; 14.09.2010 в 18:05. |
|
|||||
|
@totto
Есть такое событие Event.EXIT_FRAME - так что длительность текущего кадра можно считать по нему. Необходимую длительность кадра можно записать в констатнту. Соответственно, сравнить будет просто. Далее, в обработчике ENTER_FRAME запоминаем, сколько собираемся сделать операций. Делаем операции. В EXIT_FRAME смотрим, не просел ли fps. Если просел - уменьшаем число операций для следующего ENTER_FRAME
__________________
...вселенская грусть |
|
|||||
|
Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
|
gloomyBrain, тот же самый счетчик фпс получается. Только с настоящим точнее, ибо он захватывает и время, за которое полностью рендерится кадр. А в твоем случае мы сможем узнать только время работы скриптов.
Последний раз редактировалось i.o.; 14.09.2010 в 18:03. |
|
|||||
|
Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
|
ну это да, правильно )
|
|
|||||
|
Регистрация: May 2010
Адрес: 55.755786° с.ш. 37.617633° в.д.
Сообщений: 12
|
i.o.
Спасибо, теперь наконец-то понятно что Вы имели в виду. Я думаю, что воспользуюсь таким подходом. Хотя мне кажется ориентироваться на жёстко задаваемую константу всё же не стоит, а лучше изменять это самое расчётное время в зависимости от проседания/не проседания fps. В общем ещё раз спасибо. gloomyBrain EXIT_FRAME срабатывает сразу после ENTER_FRAME и до RENDER, так что разница между подпиской на ENTER_FRAME с низшим приоритетом и подпиской на EXIT_FRAME с практической точки зрения нет. Только разве что с точки зрения красоты кода. |
|
|||||
|
Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
|
Цитата:
Единственное что могу подсказать, так это высчитывать при запуске приложения максимально приемлимое время выполнения, при котором фпс чуть не проседает. Т.е высчитывать в самом начале расчетное_время. Потому что у всех компы разные, и если даже скрипт будет выполнятся ровно столько времени сколько ему отведете, то графика может не успевать отрисовываться за оставшееся время. Поэтому советую запускать что-то вроде теста производительности на старте. |
|
|||||
|
Регистрация: May 2010
Адрес: 55.755786° с.ш. 37.617633° в.д.
Сообщений: 12
|
Я имел в виду, что вместо вызова
где time - это и есть то самое расчётное время буду делать как-то так: if (fpsRatio < FPS_RATIO_MIN) time -= 1; else if (fpsRatio > FPS_RATIO_MAX) time += 1; megaCalculation(time); Время на отрисовку графики зависит не только от производительности компа, но и от того сколько нужно перерисовать и сколько DisplayObject добавлено на сцену, поэтому как мне думается, тест производительности в самом начале может совершенно не отражать дальнейшей ситуации со скоростью отрисовки. |
|
|||||
|
Цитата:
Сайт Потапенко снесен, а в сети нет больше кода этого конвеера,хотя что-то похожее народ делает (http://sheremetov.com/flash/flexunit-async/) Забейте тогда, чтож поделаешь. |
![]() |
![]() |
Часовой пояс GMT +4, время: 03:29. |
|
|
« Предыдущая тема | Следующая тема » |
|
|