Студопедия
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Пример 3.5. Улучшенная анимация.

Читайте также:
  1. V. Примерный образец теста, применяемого для промежуточной аттестации
  2. Web-контейнер, Servlet, JSP. Структура, назначение и пример сервлета или JSP.
  3. А вот чрезмерное употребление алкоголя действительно вызывает гинекомастию. Примерно четверо из 10 хронических алкоголиков имеют это заболевание в той или иной стадии развития.
  4. А. Здравомыслов.Примерно два года тому назад.
  5. Ая основа – Хаджури не видит разницы между нововведенцем, призывающим к своему нововведению, и не призывающим, и пример в этом он взял с Махмуда Хаддада.
  6. Будьте хорошим примером для своих детей
  7. Быть примером
  8. В наших примерах мы ни разу не рассматривали конструкторы классов, поэтому при создании экземпляров наших классов вызывался конструктор класса object.
  9. В приведенном примере нарушение синтезов пространственного гнозиса и обусловливает ряд следствий, что можно представить схематично.
  10. В только что приведенном вами примере с под­брасыванием монеты компьютерное моделирование

 

package Hipnosis.java;import java.awt.*;import java.awt.event.*;import java.awt.image.*;import javax.swing.*;import javax.swing.Timer; // Импорт java.util.Timer /** * компонент Swing, реализующий улучшенную анимацию **/public class Hypnosis extends JComponent implements ActionListener { double x, y; // центр спирали double r1, r2; // внутренний и внешний радиусы спирали double a1, a2; // начальный и конечный углы спирали double deltaA; // изменение угла между кадрами double deltaX, deltaY; // траектория центра float linewidth; // толщина линий Timer timer; // объект, управляющий сменой кадров BufferedImage buffer; // двойная буферизация Graphics2D osg; // объект Graphics2D для рисования в буфер public Hypnosis(double x, double y, double r1, double r2, double a1, double a2, float linewidth, int delay, double deltaA, double deltaX, double deltaY) { this.x = x; this.y = y; this.r1 = r1; this.r2 = r2; this.a1 = a1; this.a2 = a2; this.linewidth = linewidth; this.deltaA = deltaA; this.deltaX = deltaX; this.deltaY = deltaY; // настройка таймера на actionPerformed() каждые delay мс timer = new Timer(delay, this); // создание буфера buffer = new BufferedImage((int)(2*r2+linewidth), (int)(2*r2+linewidth), BufferedImage.TYPE_INT_RGB); // создание объекта Graphics для буфера // толщина линии и сглаживание osg = buffer.createGraphics(); osg.setStroke(new BasicStroke(linewidth, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)); osg.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); } // запуск и остановка анимации public void start() { timer.start(); } public void stop() { timer.stop(); } /** * Swing вызывает этот метод для прорисовки. * метод применяет двойную буферизацию. **/ public void paintComponent(Graphics g) { // очистка фона osg.setColor(getBackground()); osg.fillRect(0, 0, buffer.getWidth(), buffer.getHeight()); // изображение черной спирали osg.setColor(Color.black); osg.draw(new Spiral(r2+linewidth/2, r2+linewidth/2, r1, a1, r2, a2)); // копируем изображение на экран g.drawImage(buffer, (int)(x-r2), (int)(y-r2), this); } /** * метод, реализующий интерфейс ActionListener. Объект Timer * периодически взаимодействует с ним, перерисовывая области * изменений. **/ public void actionPerformed(ActionEvent e) { // перерисовка области спирали. repaint((int)(x-r2-linewidth), (int)(y-r2-linewidth), (int)(2*(r2+linewidth)), (int)(2*(r2+linewidth))); // анимация: обновление положения и углов // отскок от края Rectangle bounds = getBounds(); if ((x - r2 + deltaX < 0) || (x + r2 + deltaX > bounds.width)) deltaX = -deltaX; if ((y - r2 + deltaY < 0) || (y + r2 + deltaY > bounds.height)) deltaY = -deltaY; // перемещение центра x += deltaX; y += deltaY; // увеличение углов; a1 += deltaA; a2 += deltaA; if (a1 > 2*Math.PI) { // ограничение размера углов a1 -= 2*Math.PI; a2 -= 2*Math.PI; } // перерисовка места спирали. // пересечение с предыдущим местом repaint((int)(x-r2-linewidth), (int)(y-r2-linewidth), (int)(2*(r2+linewidth)), (int)(2*(r2+linewidth))); } /** отмена двойной буферизации */ public boolean isDoubleBuffered() { return false; } /** метод main() тестирует компонент */ public static void main(String[] args) { JFrame f = new JFrame("Hypnosis"); Hypnosis h = new Hypnosis(200, 200, 10, 100, 0, 11*Math.PI, 7, 100, 2*Math.PI/30, 3, 5); f.getContentPane().add(h, BorderLayout.CENTER); f.setSize(400, 400); f.show(); h.start(); }}

 




Дата добавления: 2015-09-11; просмотров: 65 | Поможем написать вашу работу | Нарушение авторских прав

Компоненты. | Пример 2.8. | Пример 2.15. | Пример 2.16. | Пример 2.18. | Пример 2.19. | Пример 2.20. | Пример 2.21. | Пример 2.26. | Пример 3.1. |


lektsii.net - Лекции.Нет - 2014-2025 год. (0.004 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав