Хорошо,
отбросил старый ответ. После некоторого поиска я нашел способ сделать это.
ImageIcon icon = .. [анимированный gif без цикла] .. .... label1.setIcon (значок); // анимация воспроизводится один раз .... // теперь время, чтобы удалить значок из метки1 и добавить его в label2 label1.setIcon (null); icon.getImage () на одном уровне (). // сбрасываем ресурс, используемый изображением label2.setIcon (значок); ....
Java Api: изображение # flush ()
btw. если вы оставите строку label1.setIcon (null);
, она все равно повторит анимацию значка только для метки2. label1 остается на последнем кадре.
Ну, конечно, вам нужно действительно дождаться, пока> = 1ms не пройдет, прежде чем обновлять ваш последний счетчик галочек
void Application::Update()
{
Uint32 current_time = SDL_GetTicks();
Uint32 delta_time = current_time - last_update_time;
SDL_Event event;
while(SDL_PollEvent(&event))
{
switch(event.type)
{
case SDL_QUIT:
{
should_close = true;
}
break;
default:
break;
}
}
if (delta_time >= 1)
{
// Update game objects with delta_time
last_update_time = current_time;
}
}
Вы не можете использовать SDL_GetTicks (), если хотите более высокую точность, но есть много других альтернатив. Если вы хотите быть независимым от платформы, вам нужно быть осторожным, но вот пример портативного C ++ 11, который поможет вам начать:
#include <iostream>
#include <chrono>
typedef std::chrono::high_resolution_clock Clock;
int main()
{
auto t1 = Clock::now();
auto t2 = Clock::now();
std::cout << "Delta t2-t1: "
<< std::chrono::duration_cast<std::chrono::nanoseconds>(t2 - t1).count()
<< " nanoseconds" << std::endl;
}
Запуск этого на ideone.com дал мне:
Delta t2-t1: 282 nanoseconds