Логин:   Пароль:




Новости
Рассылки
Форум
Поиск


Java
- Апплеты
- Вопрос-ответ
- Классы
- Примеры
- Руководства
- Статьи
- IDE
- Словарь терминов
- Скачать

Мобильная Java
- Игры
- Примеры
- Статьи
- WAP, WML и пр.

JavaScript
- Вопрос-ответ
- Примеры
- Статьи

Веб-мастеринг
- HTML
- CSS
- SSI

Разминка для ума
Проекты
Книги
Ссылки
Программы
Юмор :)




Rambler's Top100

Java: ПримерыУстранение мерцаний с помощью двойной буферизации

Устранение мерцаний с помощью двойной буферизации

import java.awt.*;
import java.applet.Applet;

public class Animation2 extends Applet implements Runnable {
    int fFrame = -1;
    int fDelay;
    Thread fThread;
    Image[] fEarth;
    MediaTracker fTracker;
   Image fOffScreenImage;
   Graphics fOffScreenGraphics;

   public void init() {
     fEarth = new Image[30];
     String theString;
     int theFramesPerSecond = 10;
     fTracker = new MediaTracker( this );
     fOffScreenImage = createImage(getSize().width,
                                   getSize().height);
     fOffScreenGraphics = fOffScreenImage.getGraphics();

    // Заполнение второго буфера экрана синим цветом
    fOffScreenGraphics.setColor(Color.blue);
    fOffScreenGraphics.fillRect(0, 0,
                   getSize().width, getSize().height);

     // Загрузка файлов изображений
     for (int i=1; i<=30; i++)
     {
        fEarth[i-1] = getImage (getCodeBase(),
                                "./Earth"+i+".gif");
        fTracker.addImage(fEarth[i-1], 0);
     }

     // Определение периода между кадрами в миллисекундах
     theString = getParameter("fps");
     try {
       if (theString != null) {
           theFramesPerSecond = Integer.parseInt(theString );
       }
     } catch (NumberFormatException e) {}
       fDelay = (theFramesPerSecond > 0) ?
              (1000 / theFramesPerSecond) : 100;
   }

   public void start() {
     // Запуск нового потока анимации
     if (fThread == null) {
         fThread = new Thread(this);
     }
     fThread.start();
   }

   public void stop() {
     // Остановка потока анимации
     fThread = null;
   }

   public void run() {
   // Работа с низким приоритетом; анимация не должна мешать основной обработке
     Thread.currentThread().setPriority(Thread.MIN_PRIORITY);
     long theStartTime = System.currentTimeMillis();

     // Начало процесса вывода анимации
     try {
      fTracker.waitForID(0);
         } catch (InterruptedException e) {
       System.err.println("Interrupted Exception: " +
           e.getMessage());
       e.printStackTrace();
       return;
         }
   while (Thread.currentThread() == fThread) {

      // Переход к следующему кадру
      fFrame++;

      // Отображение нового кадра
      repaint();

      // Задержка, определяемая частотой кадров.
      try {
            theStartTime += fDelay;
            Thread.sleep(Math.max(0,
            theStartTime-System.currentTimeMillis()));
         } catch (InterruptedException e) {
               break;
       }
     }
   }

  public void update( Graphics g) {

     // Заполнение дополнительного буфера синим цветом
     fOffScreenGraphics.setColor(Color.blue);
     fOffScreenGraphics.clearRect(0, 0,
                 getSize().width, getSize().height);
     fOffScreenGraphics.fillRect(0, 0,
                   getSize().width, getSize().height);
     paint(g);
  }

// Отображение текущего кадра
public void paint(Graphics g) {
   if (fTracker.checkID( 0 )) {
    fOffScreenGraphics.drawImage(fEarth[fFrame % 30], 0, 0, this);
     g.drawImage(fOffScreenImage, 0, 0, this);
  }
 }
}
Java файл


Х. М. Дейтел, П. Дж. Дейтел, С. И. Сантри
"Технологии программирования на Java 2. Книга 2. Распределенные приложения"
Подробнее>>
Заказать>>


Халид А. Мугал, Рольф В. Расмуссен
"Java. Руководство по подготовке к сдаче сертификационного экзамена CX-310-035 (+ CD-ROM)"
Подробнее>>
Заказать>>

Узнай о чем ты на самом деле сейчас думаешь тут.


[an error occurred while processing this directive]



Apache Struts 2.0.11
Apache MyFaces Trinidad Core 1.2.3.
Sun переводит мобильные устройства с Java ME на Java SE
Хакерская атака!