Вначале я создаю новый FPSAnimator (drawable, FPS, true); Можно ли ускорить или замедлить (т. Е. Изменить FPS анимации) скорость анимации после запуска FPSAnimator?Изменение кадра в секунду FPSAnimator
ответ
У FPSAnimator есть метод с именем .setFPS(). Он работает после того, как аниматор уже запущен. Вот link для вас.
EDIT:
Когда аниматор начинает не удается снова изменить FPS и некоторые методы, такие как this не работает или мой уровень кодирования не достаточно, чтобы использовать его.
Итак, здесь я дам вам небольшой пример Java о том, как сменить FPS после того, как вы сначала запустите Animator.
Допустим, у нас есть простая игра-змея с OpenGL (libjogl) и ваш основной метод;
public static void main(String[] args) {
GLCanvas canvas = new GLCanvas();
Frame frame = new Frame("Snake");
frame.setSize(500, 500);
frame.add(canvas);
frame.setVisible(true);
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
Animator animator = new FPSAnimator(canvas, fps);
SnakeGameScene scene = new SnakeGameScene(animator);
canvas.requestFocus();
canvas.addGLEventListener(scene);
canvas.addKeyListener(scene);
animator.start();
}
Здесь у вас есть рама, холст WindowListener, Аниматор, вещь OpenGL одушевленные, в этом случае SnakeGameScene ... Если мы изменим основной и класс, где основной метод, чтобы сделать аниматор кадров в секунду переменчивый каким-то триггером. Код, который я покажу, изменит его нажатием клавиш. Таким образом, он находится в ключе SnakeGameScenePressed @Overrides.
@Override
public void keyPressed(KeyEvent k) {
int keyCode = k. getKeyCode();
try{
if(this.lockKeyAfterPressed){
switch(keyCode){
case KeyEvent.VK_UP:
this.snake.setDirection(Direction.UP);
lockKeyAfterPressed =false;
break;
case KeyEvent.VK_DOWN:
this.snake.setDirection(Direction.DOWN);
lockKeyAfterPressed =false;
break;
case KeyEvent.VK_LEFT:
this.snake.setDirection(Direction.LEFT);
lockKeyAfterPressed =false;
break;
case KeyEvent.VK_RIGHT:
this.snake.setDirection(Direction.RIGHT);
lockKeyAfterPressed =false;
break;
case KeyEvent.VK_Z: // n1
Application.increaseFPS();
break;
case KeyEvent.VK_X://n2
Application.decreaseFPS();
break;
}
}
}catch(Exception e){
e.printStackTrace();
}
}
В этой части, соответствующие случаи Последние два случая, n1 и n2. Когда нажата соответствующая клавиша, она увеличивается или уменьшается. Но, как я сказал выше, нам нужно сначала остановить аниматора. Поэтому мы меняем основной класс следующим образом:
public class Application {
private static int fps = 1;
private static Animator animator;
private static GLCanvas canvas;
public static void setAnimator(Animator animator){Application.animator = animator;}
public static int getFps() {return fps;}
public static void setFps(int fps) {Application.fps = fps;}
public static void increaseFPS(){
animator.stop();
setFps((getFps()+1));
Application.updateAnimator();
}
public static void decreaseFPS(){
animator.stop();
setFps((getFps()-1));
if(getFps() <1){setFps(1);}
Application.updateAnimator();
}
private static void updateAnimator(){
Application.setAnimator(new FPSAnimator(canvas, fps));
animator.start();
}
public static void main(String[] args) {
canvas = new GLCanvas();
Frame frame = new Frame("Snake");
frame.setSize(500, 500);frame.add(canvas);
frame.setVisible(true);
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
animator = new FPSAnimator(canvas, fps);
SnakeGameScene scene = new SnakeGameScene(animator);
canvas.requestFocus();
canvas.addGLEventListener(scene);
canvas.addKeyListener(scene);
animator.start();
}
}
Здесь вы не создаете Canvas, animator и Fps в основном методе, они должны быть в классе. Когда нажата соответствующая клавиша, система остановит аниматор, а затем создаст новый аниматор с обновленным fps и установит его как аниматор, снова запустит экземпляр аниматора.
Извините, если я переполняю, добавьте нерелевантные коды, сделайте описание и синтаксическую ошибку. Надеюсь, он вам поможет.
- 1. Извлечение 1 кадра в секунду из видео
- 2. Изменение атрибута каждую секунду
- 3. Изменение цвета фона (каждую секунду небольшое изменение)
- 4. Изменение минимального кадра динамически
- 5. Изменение размера просмотра кадра
- 6. Изменение размера кадра SDI
- 7. CGAffineTransformMakeTranslation изменение высоты кадра
- 8. Изменение заголовка кадра в wxPython
- 9. Изменение кадра значения в IBOutletCollection
- 10. Изменение кадра данных в R
- 11. Изменение кадра UITableView программно
- 12. Изменение содержимого кадра
- 13. Изменение размера скрытого кадра
- 14. Динамическое изменение графика каждую секунду
- 15. Изменение цвета фона кадра
- 16. Лучший способ конвертировать видео 59,94 кадра в секунду в 29,97?
- 17. Изменение фона кнопки каждую секунду
- 18. Изменение CSS-контента с помощью ключевого кадра
- 19. анимация Matplotlib слишком медленная (~ 3 кадра в секунду)
- 20. Как сделать 1 изменение в секунду
- 21. Изменение размера кадра таблицы программно
- 22. Реструктуризация/изменение кадра данных (r)
- 23. Изменение размера видеоэффектов (размер кадра)
- 24. Анимация ключевого кадра - мгновенное изменение
- 25. панды - Изменение формата кадра данных
- 26. UICell размер TextLabel изменение кадра
- 27. Изменение типа столбца кадра данных
- 28. Изменение стиля кадра данных в панд
- 29. Изменение формы кадра данных в R
- 30. Изменение размеров кадра данных в R
Если вы прочтете свою ссылку, вы увидите, что она будет генерировать исключение в тех случаях, когда аниматор уже запущен. «Броски: GLException - если аниматор уже запущен» Вам нужно остановить анимацию, чтобы изменить FPS, а затем начать снова – Horonchik
Да, извинения за прочтение этого сообщения, я отредактирую свой ответ для лучшего решения. – rebuked
Этот ответ намного сложнее, чем нужно. Вместо повторной инициализации аниматора просто остановите его, установите fps и перезапустите его. 'Animator.stop(); animator.setFPS (кадров в секунду); animator.start(); ' – Winder