2014-04-29 2 views
1

Я хочу, чтобы актер перемещался из одной точки в другую в методе.LIBGDX Анимация без enternig render()

int i=0; 
    while(i<20){ 
     actor.get(nb).moveBy(rx, ry); 
     //Wait 
     long ti = System.nanoTime(); 
     while((System.nanoTime()-ti)<50000000){} 
     i++; 
    } 

Но когда это происходит анимация не показывает, пока актер не на конечной точке, потому что не будет метода визуализации, пока этот метод не будет завершен.

Есть ли способ сделать анимацию без помощи метода рендеринга?

ответ

2

Вы должны узнать больше о libgdx и о том, как работает его архитектура. The life cycle.

Что вы там делаете, это ожидание, и это то, что вам нужно НИКОГДА do. Метод render() фактически получает значение float, которое называется deltaTime. Это количество времени, которое потребовалось для рендеринга последнего кадра. Вы можете использовать это значение, чтобы обновить позицию своих участников, исходя из времени, которое прошло.

actor.get(nb).moveBy(rx * deltaTime, ry * deltaTime); 

Таким образом, вы перемещаете своего актора на (rx, ry) через 1 секунду. Если вы хотите, чтобы это произошло через 2 секунды, вы должны уменьшить скорость.

actor.get(nb).moveBy(rx/2 * deltaTime, ry/2 * deltaTime); 

Таким образом, вы не полностью блокируете свою программу активным ожиданием, но вы перемещаете актера в соответствии с пройденным временем. Затем он будет отображаться и со следующим вызовом render(deltaTime), который libgdx будет делать сразу после этого, вы будете делать то же самое, пока не достигнете своего места назначения. Это нужно решать по-другому, потому что иначе ваш актер никогда не перестанет двигаться. Вы можете сделать это с помощью простого заявления if, который остановит движение актера от определенной точки.

if (actor.getPosition().x < 10, actor.getPosition().y < 15) { 
    actor.get(nb).moveBy(rx/2 * deltaTime, ry/2 * deltaTime); 
} 
1

Если вы хотите анимировать Actor, используйте Actions класс как это:

actor.addAction(Actions.moveTo(newX, newY, duration)) 

добавить Также вы Актера к сцене и вызвать Stage#act() в Заявке # визуализации() метод ... вся магия перевода актера в зависимости от дельта-времени будет обработана для вас ... подробнее о вики проекта сайта проекта здесь: https://github.com/libgdx/libgdx/wiki/Scene2d

Смежные вопросы