Неожиданные результаты, реализующие простое размытие движения в Libgdx

В двух прикрепленных изображениях снимок экрана на рабочем столе libgdx работает так, как ожидалось. Скриншот от моей Galaxy Nexus, к сожалению, не так, как ожидалось. Я пытаюсь создать простое размытие движения или след.

Рендеринг, как я ожидал, на своем рабочем столе. Libgdx работает на моем рабочем столе, работая как ожидалось

Не рендеринг, как я ожидал от своей галактики. Libgdx работает на моей Galaxy Nexus, не работает как ожидалось

Текстуры окружности рисуются в цикле for во время рендеринга, и эффект достигается с помощью pixmap с использованием RGBA 0, 0, 0, 0.1f, который рисуется перед кругами.

ScreenClearSprite создание

Pixmap screenClearPixmap = new Pixmap(256, 256, Format.RGBA8888); screenClearPixmap.setColor(Color.rgba8888(0, 0, 0, 0.1f)); screenClearPixmap.fillRectangle(0, 0, 256, 256); screenClearTexture = new Texture(screenClearPixmap); screenClearSprite = new Sprite(screenClearTexture); screenClearSprite.setSize(screenWidth, screenHeight); screenClearPixmap.dispose(); 

оказывать

 batch.begin(); font.draw(batch, "fps:" + Gdx.graphics.getFramesPerSecond(), 0, 20); screenClearSprite.draw(batch); for (int i = 0; i < circleBodies.size(); i++) { tempPos = circleBodies.get(i).getPosition(); batch.draw(circleTexture, (tempPos.x * SCALE) + screenWidthHalf - circleSizeHalf, (tempPos.y * SCALE) + screenHeightHalf - circleSizeHalf); } batch.end(); 

Итак, что я сделал неправильно? Возможно, есть лучший способ получить эффект движения «motion blur»?

Solutions Collecting From Web of "Неожиданные результаты, реализующие простое размытие движения в Libgdx"

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

Это означает, что вам придется немного изменить код. Хорошая вещь об этом заключается в том, что способ, которым вы это делаете, имеет некоторые недостатки: он будет размывать все в движении, а не только шары. И может быстро производить уродливые результаты / артефакты, если вы не будете осторожны.

  1. Сделайте то же, что и сейчас, но вместо того, чтобы рисовать шары в пакет, нарисуйте их на текстуре / растровое изображение / что угодно. Затем каждый кадр добавляет альфа-смешанное изображение по шариковому изображению, а затем рисует шары в их текущем положении поверх этого. Затем добавьте это изображение на свой экран. Очень похоже на то, что вы делаете сейчас, за исключением того, что вы рисуете что-то еще и сохраняете его. Таким образом, вам не нужно полагаться на видовое окно, на которое вы рисуете, и можете хранить все в отдельности. Этот метод аналогичен рисованию буфера накопления .

  2. Вместо того, чтобы делать это так, как вы делаете, вы можете отслеживать n последних позиций каждого шара. И затем нарисуйте все из них в каждом кадре, с разными альфа. Это очень легко реализовать. Это может привести к многочисленным вызовам рисования, если у вас много мячей или большое количество n , но если это не слишком много, это не должно ограничивать ваши fps и дает хороший контроль.

Возможно, есть лучший способ получить эффект движения «motion blur»?

Чтобы сделать motion blur в моей игре, я использую другой подход « Эффект частицы », он работает отлично с моим, и у меня не было проблем с Android / Desktop или с различными устройствами Android

Все, что вам нужно сделать, это использовать «Редактор эффектов частиц» Libgdx и сделать свой эффект, а затем загрузить его в свой проект, наконец, нарисовать его в том же месте, на котором вы нарисуете свой объект (и алос рисует ваш объект)

Советы по созданию файла правого эффекта с помощью редактора Paticle:

  • Установить (использовать) тот же образ объекта, который вы хотите размыть его движение в эффекте частицы

  • Попытайтесь ограничить счет : максимальное количество частиц разрешено

  • Отключите параметр «скорость» и «угол»

Эффект частиц помогает сделать эффект движения Надеюсь, это поможет кому-то!