Форум программистов, компьютерный форум CyberForum.ru

LibGdx. Подергивание спрайта. Не связано с GC - Android

Восстановить пароль Регистрация
Другие темы раздела
Android Изменить стиль DialogFragment http://www.cyberforum.ru/android-dev/thread1125796.html
Приветствую, Есть приложение, в приложении есть DialogFragment с DatePicker и парой кнопок. Как изменить его стиль? Ну хотя бы цвет шрифта, и кнопок. Я пытался так: public class SetDateTime extends DialogFragment{ private Calendar calendar; private DatePicker datePicker; private TimePicker timePicker; @Override public Dialog onCreateDialog(Bundle...
Android Toast duration Подскажите как задать свое время Добавлено через 1 минуту только вот мне надо большое время задать например минута http://www.cyberforum.ru/android-dev/thread1125775.html
Android Таймер отправки данных на MySql
Помогите решить проблему на java только подсел раньше писал на delphi xe5 под android ( Pascal ). Ребята посоветовали. Но впечатление огромные. Проблема такая есть данные в TextView1 и TextView2 нужно чтобы каждые скажем 5 минут данные отправлялись на сервер авто режиме. На Delphi не проблема кидаем на form1 timer1 прописываем код и все. Желательно чтобы отправка данных занимался sql скрипт....
Android Простое приложения для загрузки веб интерфейса по IP адресу и № порта
Добрый день! Подскажите как лучше решить данную задачу не имея навыков програмирования на андрод! Дома есть интернет с белым IP. Я через простой браузер подключаюсь по IP адресу: +Порт к домашнему контроллеру. И уменя отобразается его веб интерфес. Задача: андроиде сделать приложение где первая страница запускается с 3-мя полями 1) № IP 2) № порта 3) пароль и 1 кнопка "войти" после того как...
Android OnTouch и onLongClick http://www.cyberforum.ru/android-dev/thread1125320.html
вот есть ImageButon btnAdd @Override public boolean onTouch(final View view, MotionEvent motionEvent) { switch (view.getId()){ case R.id.imgBntAdd: switch (motionEvent.getAction()){ case MotionEvent.ACTION_DOWN: btnAdd.setBackgroundColor(color1); //time 1 == время зажатия кнопки
Android Другой кнопкой из дочерней активности изменить фон той кнопки, которая в родительской активити Вот такая проблема: у меня в главной активности есть кнопка, как мне другой кнопкой из дочерней активности изменить фон той кнопки, которая в родительской активити?Подскажите новичку... подробнее

Показать сообщение отдельно
alone_mamont
0 / 0 / 0
Регистрация: 21.03.2014
Сообщений: 2
22.03.2014, 01:35     LibGdx. Подергивание спрайта. Не связано с GC
Здравствуйте. Недавно начал использовать LibGdx для написания платформера, как банально)) Создавая десктопное LwjglApplication обнаружил пренеприятнейшее поведение шарика, который отрисовываю на экране управляя его движением стрелками. Периодически, довольно часто, он дергается (будто на мгновение, или кадр , он оказывается в предыдущем положении, а на след кадр уже там где должен быть). Первым делом проверил работу GarbageCollector'а, так как порой дергания возникали периодично, но так как там и вправду нечего было "собирать", сборки мусора происходили редко и не совпадали с подергиванием. Поизучал доступную информацию,как понял, все сводится к тому, что это !типичная! проблема как-то связанная с настройкой lwjglApplicationConfiguration.vSyncEnabled, которая, вроде, отвечает за стабилизацию фрэймрейта приложения. Не уверен, что точно понял как правильно ее использовать, но попробовал в обоих положениях вкл и выкл.
Для стабилизации фрэймрейта ввел следующую типичную конструкцию:
Java
1
2
3
4
5
6
7
8
9
10
11
float accumTime = 0;
float TIME_STEP = 0.016f;// также использовал вариант 1 \ 60f
@Override
public void render(float delta) {
  accumTime += delta;
  while (accumTime >= TIME_STEP) {
    accumTime -= TIME_STEP;
    gameScreenController.update(TIME_STEP);
    gameScreenRender.render();
  }    
}
Как я понял после,хотя может я и не так понял, эта конструкция бессмысленна при включенной синхронизации vSyncEnabled, так как даже если я поставлю TIME_STEP = 1 /30f, эффекта для фпс не будет никакого. Те же 60-61 fps в FPSLogger, только ужасно мерцающая картинка на экране. В сорцах указано:
Java
1
2
/** whether to enable vsync, can be changed at runtime via {@link Graphics#setVSync(boolean)} **/
  public boolean vSyncEnabled = true;
Пробую выкл это во время создания экземпляра моего GameScreen. Все так же плохо) Также где-то сказано "Vsync is not enabled when useCPUSync is false in LWJGLGraphics", но как изменить useCPUSync я не понял.

FPSLogger во время бездействия на экране показывает стабильно 61 fps, во время подергиваний частенько показывает падение до 60fps.
Видимо то, что я вижу подергивания и есть результат изменения fps, но как? ведь мои расчеты позиции а прочего основаны исключительно на величине TIME_STEP за каждый update. Грубо говоря:
Java
1
2
3
float persоnageShiftY += currentVerticalSpeed * elapsedTime;
float persоnageShiftX = elapsedTime * personage.getCurrentSpeed();
personage.getPosition().add(persShiftX, persShiftY, 0);
Особенно тяжело для меня понять то, что визуально это выглядит как маленький "откат" назад. Хотя возможно это чисто мое визуальное восприятие.
Очень хорошо иллюстрирует то, что происходит у меня на экране вот это видео

что то BB-код ютуба не сработал:
http://www.youtube.com/watch?v=JInZ6dhVIgU

Подводя итог - мне необходимо либо какой-то ответ что я делаю не так, либо как вариант,понять, как можно регулировать фпс самому, то бишь выключить его автоматическую стабилизацию и установить его самому. Как мне кажется проблема где-то там.
Буду благодарен за любую помощь.

Добавлено через 10 часов 56 минут
Серия экспериментов показала:
1. Чтобы поставить необходимый вам фпс надо:
Java
1
2
3
4
5
6
int FPS_I_WISH = 90;
/** Target framerate when the window is in the foreground. The CPU sleeps as needed. Use 0 to never sleep. **/
cfg.foregroundFPS = FPS_I_WISH ;
/** Target framerate when the window is not in the foreground. The CPU sleeps as needed. Use 0 to never , -1 to not render. **/
cfg.backgroundFPS = FPS_I_WISH ;
cfg.vSyncEnabled = false;
если оставить
Java
1
cfg.vSyncEnabled = true;
то fps будет стремиться к 61.
2. Повышаю понемногу фпс, количество дерганий сокращается, движение целиком становится как-будто состоящим из серии микро-дерганий, словно видишь отдельные кадры. Повышаю до 90 и наступает блаженство - дерганий практически нет, движение выглядит достаточно слитным.
3. На разных фпс, когда случается дергание, в 90% случаев это сопровождается проседанием фпс на 1-2 кадра.
4. Возникла идея - ставлю фпс например 100-150, но конструкцией
Java
1
2
3
4
5
6
accumTime += delta;
 while (accumTime >= TIME_STEP) {
   accumTime -= TIME_STEP;
   gameScreenController.update(TIME_STEP);
   gameScreenRender.render();
 }
понижаю/выравниваю fps четко до нужного значения через TIME_STEP. Попробовал - получилась страшная жуть. Все жутко дергается.

В итоге, казалось бы, желаемый результат достигнут, но ведь это не прокатит для андроид приложения, там же все вроде выровняется снова до 60. Хотя точно не могу утверждать. Но в любом случае фпс=90 будет дорого по энергозатратам. Поэтому я все так же открыт для правильных решений.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 14:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru