Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Реальный fps (http://www.flasher.ru/forum/showthread.php?t=127746)

Psycho Tiger 22.07.2009 19:53

Вы о чем?..
ENTER_FRAME будет вызываться каждый раз, когда флеш-плееру НАДО отрисовать кадр. Сказали - он рассылает событие, но экран не обновляет. После него прямо перед обновлением экрана идет событие RENDER.
И зачем перекладывать "с нестабильного (???) ENTER_FRAME" на "стабильный Timer" ?
В 1 случае вся игра затормозит из за падения фпс, во 2 случае - фп скорее повеситься, а если и не повеситься - то на экране у юзера будет черти что.
Единственное, что может быть в реалтайм мморпг сие рывки будут правильнее общих тормозов всего и вся, но если у автора появился этот вопрос - он не мморпг делать собрался.

iflamberg 22.07.2009 20:07

Затем перекладывать на таймер, что это дает более высокое и стабильное обновление экрана!
Вот в этой http://www.8bitrocket.com/newsdispla...newspage=10248 статье, по-моему все замечательно раскрыто.

BlooDHounD 22.07.2009 20:32

Psycho Tiger, бред.
ENTER_FRAME - вызывается когда происходит вхождение в новый кадр. то есть предыдущий отрисован.
RENDER - рассылается, на сколько я помню, если вызывать Stage#invalidate()
причём тут мморпг я вообще молчу.

Psycho Tiger 22.07.2009 21:46

Цитата:

Сообщение от BlooDHounD (Сообщение 837417)
Psycho Tiger, бред.
ENTER_FRAME - вызывается когда происходит вхождение в новый кадр. то есть предыдущий отрисован.
RENDER - рассылается, на сколько я помню, если вызывать Stage#invalidate()
причём тут мморпг я вообще молчу.

Цитата:

ENTER_FRAME будет вызываться каждый раз, когда флеш-плееру НАДО отрисовать кадр. Сказали - он рассылает событие, но экран не обновляет.
Примерно это я имел ввиду. Кадр отрисован, и идет вхождение в новый кадр - тогда и вызывается.
RENDER надо заставить рассылаться вручную - это другой вопрос, если нужно поймать событие, когда уже всё готово к отрисовке, но отрисовка ещё не пошла - его мы и ловим.
Просмотрел бегло статью. Самый веский аргумент - потеря фпс в IE. Давно ещё тесты проводил, это не относиться к "тормозам" - как самый быстрый тест - увеличиваем фпс вдвое и смотрим - если бы с ENTER_FRAME были реально тормоза - фп готов был бы повеситься, а нет, все идет нормально. Как учесть - вполне, но все же отказываться от ENTER_FRAME я пока не собираюсь - слишком сомнительны условия.

Да, про реалтайм мморпг, что я хотел сказать:
если фпс вдруг падает, то ENTER_FRAME реже рассылается в единицу времени. Если он реже рассылается, значит идет меньше пересчетов, но игровые константы не меняются, то есть попросту говоря в игре как бы замедляется время. В обычной синглплеер игре это не очень критично, если на старых машинах в критичные моменты упадет 10 фпс.
Если игра онлайновая, то придав какому нибудь обьекту "а ля" бомба, падающая сверху позицию и ускорение - она полетит вниз, и при столкновении с землей она взорвется. При подобном падении фпс эта бомба взорвется до соприкосновения с землей, что вызовет негодования у игрока. В случае с таймером - игра пойдет менее плавно, рывками, но бомба упадет именно в срок. Так понятней, что я имел ввиду?

Яски 22.07.2009 21:54

Если фпс ниже заданного, ваше "стабильное" событие таймера вообще может не вызываться.

Добавлено через 3 минуты
А самый лучший вариант, считать физику в ENTER_FRAME перед отрисовкой. Только нужно замерять прошедшее время с предыдущего кадра и считать физику сколько нужно за этот промежуток. Так на быстрых компах будет ниже нагрузка на проц, а на медленных тачках реже будет выполняться перерисовка, при той же скорости мира.

BlooDHounD 22.07.2009 22:41

Psycho Tiger, у Вас каша в голове. зачем заставлять рассылаться RENDER? чем он будет от ENTER_FRAME отличаться? Вы отличаете тормоза от ограничения ФПС? сколько ММОРПГ Вы написали? Вы когда-нить слышали про формулу зависимости от времени? Вы вообще понимаете как таймер в АС3 работает?

Яски, ну хоть у Вас здравые мысли в голове.

Psycho Tiger 22.07.2009 22:49

Цитата:

зачем заставлять рассылаться RENDER?
прозвучал вопрос о событии "прямо" перед отрисовкой. Я сказал, что это не ENTER_FRAME, а RENDER.
Цитата:

Вы отличаете тормоза от ограничения ФПС?
Если ФПС ниже положенного, это тормоза.
Цитата:

сколько ММОРПГ Вы написали?
0.
Цитата:

Вы когда-нить слышали про формулу зависимости от времени?
Бывало.
Цитата:

Вы вообще понимаете как таймер в АС3 работает?
Существуют мысли, что как более стабильный и удобный setInterval

Да, у Яски хорошая идея.

BlooDHounD 22.07.2009 22:53

Цитата:

Сообщение от Psycho Tiger (Сообщение 837441)
прозвучал вопрос о событии "прямо" перед отрисовкой. Я сказал, что это не ENTER_FRAME, а RENDER.

ну так это неправда.
Цитата:

Сообщение от Psycho Tiger (Сообщение 837441)
Если ФПС ниже положенного, это тормоза.

а моём понимании, это когда проц не справляется с задачей.
Цитата:

Сообщение от Psycho Tiger (Сообщение 837441)
Существуют мысли, что как более стабильный и удобный setInterval

а как setInterval работает Вы понимаете?

Psycho Tiger 22.07.2009 23:01

В AS3 добавлено новое событие Event.RENDER (flash.events.Event.RENDER), которое рассылается после enterFrame, но перед тем, как экран флеш-плеера обновится. (пруфлинк)
Что то ещё произойдет после RENDER`а, но перед отрисовкой? Буду рад, если скажешь, что именно и где я не прав.

Цитата:

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

а как setInterval работает Вы понимаете?
Через определенные промежутки времени вызывает функцию/метод. Timer рассылает событие. Нет, я не прав?

BlooDHounD 22.07.2009 23:37

Цитата:

Сообщение от Psycho Tiger (Сообщение 837446)
В AS3 добавлено новое событие Event.RENDER (flash.events.Event.RENDER), которое рассылается после enterFrame, но перед тем, как экран флеш-плеера обновится. (пруфлинк)
Что то ещё произойдет после RENDER`а, но перед отрисовкой? Буду рад, если скажешь, что именно и где я не прав.

везде прав, кроме места применения. рендер будет вызываться ровно столько раз сколько и enter_frame, собственно, тогда нафига он тут нужен?
Цитата:

Сообщение от Psycho Tiger (Сообщение 837446)
Если проц не справляется с задачей - это вызывает тормоза. Смысл-то один. Или "тормоза" используется здесь не в плане что всё работает медленнее, чем должно, а это какой-то новый термин?

оно работает не совсем медленнее. просто искусственно занижен ФПС. проблема решается тем, что все расчёты делаются не в зависимости от количества кадров, а от времени, которое прошло.
Цитата:

Сообщение от Psycho Tiger (Сообщение 837446)
Через определенные промежутки времени вызывает функцию/метод. Timer рассылает событие. Нет, я не прав?

неправы в двойне. во-первых никакого события setInterval не рассылает, а во вторых, совсем не через определенные.


Часовой пояс GMT +4, время: 08:22.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.