ITIhonov
> при высокой скорости объектов
высокая это какая? 200 единиц это много? При расчёте перемещения
x += dt * speed * angle
т.к. именно с такой скоростью летают объекты и они подёргиваются, а если планета в бэкграунде пролетает со скоростью 50 тогда всё плавно.
Opts
> 200 единиц это много
200 единиц чего? :)
если в соседних кадрах у вас изображения объекта не пересекаются, скажем, на половину - то глаза не воспримут это как движение. Визуально у вас объект моментально "телепортировался" с одного места на другое - потому что промежуточного движения графически не было.
Opts
> вы ещё забыли добавить два бэка в размере 1024/768, плюс каждый спрайт имеет
> рандомную скорость угол и масштаб.
Давай на "ты".
У меня один бэк в проверке, скорости вообще тут роли не играют. А масштаб? Это тоже не затормозит при аппаратном ускорении, еслим только ты не скейлишь на увеличение.
Opts
> втихаря поставить 300, возможно это и не правильно
Так значит видюшка тянет 300. А на 60 дёргается - это где-то у тебя ошибка.
Ты попробуй оставить один спрайт, если он всё равно будет дёргаться, значит нужно где-то искать, что сделано неправильно.
и наверняка это "неправильно" в расчете времени между кадрами
Mikle
> Ты попробуй оставить один спрайт
так в том то и дело что уже пробовал, когда отключаю всю дополнительную графику, скажем из 250 спрайтов ставлю 10, тогда 60 фпс за глаза хватает, чтобы комфортно играть. И ничего не тормозит, и ничего не дёргается, но как только возвращаю весь графический контент обратно, то и дёрганье возвращается. Поэтому и решил, что слишком тяжёлый рендер.
> А масштаб?
от 0.2 до 3.0 рандомно.
ITIhonov
> 200 единиц чего? :)
ну а в чём мы указываем скорость в игре, когда смещение рассчитываем по x += dt * speed * angle
bool
> в расчете времени между кадрами
был бы очень благодарен, если бы кто посмотрел как рассчитывается ФПС в HGE и сказал
да там всё правильно рассчитывается
нет, там вообще фигня полная и куча погрешностей
я не смогу так проанализировать.
Opts
> ну а в чём мы указываем скорость в игре, когда смещение рассчитываем по x += dt
> * speed * angle
в попугаях.
я же говорю про движение в экранных координатах, в размерах растеризованного изображения объекта. Перемещение в 0.5 размера между соседними кадрами - комфортная скорость.
мне просто непонятно как может при 60 фпс хватать скорости обновления для 1 объекта и не хватать для 10. оно в разных потоках и время разное? получается что апдейт не зависит от времени и тормозит при 10 объектах или как? на мой взгляд 60 фпс это что для 10 объектов, что для 100.
Opts
> был бы очень благодарен, если бы кто посмотрел как рассчитывается ФПС в HGE и
> сказал
а вы hge->System_SetState(HGE_FPS, HGEFPS_VSYNC); делаете или как?
А в чем профит делать по 300 фпс, если у монитора частота обновления ниже?
Зачем напрягать видюху во имя того, что монитор не покажет?
cherepets
> А в чем профит делать по 300 фпс, если у монитора частота обновления ниже?
> Зачем напрягать видюху во имя того, что монитор не покажет?
вобще-то покажет. выражается это в tearing. при 300 fps наверное даже что-то типа motion blur будет при движении по вертикали вниз. :)
cherepets
> А в чем профит делать по 300 фпс, если у монитора частота обновления ниже?
задайте этот вопрос разработчикам
Эхо печали
именем короля
Герои эллады
видимо для них профит был.
bool
> на мой взгляд 60 фпс это что для 10 объектов, что для 100.
ок, значит ошибка у меня в коде, буду искать.
>а вы hge->System_SetState(HGE_FPS, HGEFPS_VSYNC); делаете или как?
вчера проверял при 60, VSYNC не помню результат, сегодня проверю ещё раз.
А время как получаешь, hge->Timer_GetDelta();? ну и дополнительно переключи процесс на 1 ядро, SetProcessAffinityMask(GetCurrentProcess(), 1);
bool
> А время как получаешь
да hge->Timer_GetDelta().
> переключи процесс
ок, попробую. Но я думаю, что переписывать код всё равно придётся.
Может речь о другом? Есть у DirectX такая странность - иногда действительно дёргается картинка, хоть код перепроверен, наверняка без багов, нагрузка на GPU небольшая. Наблюдается это далеко не на всех компьютерах.
На DirectX8 был такой способ пофиксить это - локаем каждый кадр бэкбуфер и читаем оттуда 1 пиксель. На DirectX9 это перестало помогать, но часто помогает Sleep(0) в цикле рендера. На моей игре AoS2 и это не помогало, пока я не подключил звук (DirectSound), и баг пропал сам собой, я пробовал выключать звук - опять рывки.
Тема в архиве.