Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите с комментариями, немогу в некоторых местах разобраться 
:(
    Опции темы
СерегаГоляков
  Дата 30.4.2010, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Всё супер :)
*


Профиль
Группа: Участник
Сообщений: 142
Регистрация: 26.4.2010
Где: НСК

Репутация: нет
Всего: нет



Недавно начал изучать неконсольную JAVA.


вот есть программа летящего вращающегося квадрата, кот от удара изменяет скорость вращения.
Кто знающий, опишите еси мона каждую строку

Код

package Rab;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class RabFig extends JFrame
{
    public RabFig()  //что это значит
       {
          add(new MyPanel()); //метод, выводит нашу панельку на экран
          pack();   // ???
       }
    public static void main()//ф-я MAIN()
      {
         new RabFig().setVisible(true); //отображение окна со всеми параметрами
      }
}
class MyPanel extends JPanel
{
    RevolvingFigure rf;//, rf2;
    MyPanel()
    {
        setLayout(null);
        setPreferredSize(new Dimension(340, 340));//установка размера окна
        rf = new RevolvingFigure(60, 4, 2, 1);//создание объекта(сторона,скругление,скорости вращения по осям)
        rf.setBounds(20, 20, rf.getPreferredSize().width,
        rf.getPreferredSize().height);
        add(rf);//добавьть наш квадрат на экран
        
        //Треугольник
        //rf2 = new RevolvingFigure(50, 3, 2, -1);
        // rf2.setBounds(320, 120, rf.getPreferredSize().width,
        // rf.getPreferredSize().height);
        //add(rf2);
    }
}
class RevolvingFigure extends JComponent implements Runnable
{
 int radius, tops, speed, direction;
 double angle = 0;
 private int xx = 1, yy = 1;

 RevolvingFigure(int radius, int tops, int speed, int direction)
     {
      this.radius = radius;
      this.tops = tops;
      this.speed = speed;
      this.direction = direction;
      setPreferredSize(new Dimension(radius * 2, radius * 2));
      new Thread(this).start();//запуск нашего потока
     }
 private Point [] getTops()
     {
      Point [] p = new Point [tops];//создаем массив вершин
      double alpha = Math.PI * 2 / tops;
      for(int i = 0; i < tops; i++)
      {
      double x = Math.cos(alpha * i + Math.toRadians(angle)) * radius;//координаты вершин
      double y = Math.sin(alpha * i + Math.toRadians(angle)) * radius;
      p [i] = new Point((int)x + radius, (int)y + radius);
      }
      return p;
     }
 public void paintComponent(Graphics g)
     {
      Graphics2D g2 = (Graphics2D)g;
      g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                          RenderingHints.VALUE_ANTIALIAS_ON);
      Point [] p = getTops();
      for(int i = 0; i < p.length - 1; i++)
       g2.drawLine(p [i].x, p [i].y, p [i + 1].x, p [i + 1].y);
      g2.drawLine(p [p.length - 1].x, p [p.length - 1].y, p [0].x, p [0].y);
     }
 public void run()
 {
    try
      {
      int count = 50;
      while(true)
            {
            Thread.currentThread().sleep(20);
            angle += speed * direction;
            if(angle >= 360 || angle <= -360)
             angle = 0;
            newLocation();
            if(count % 50 == 0)
             speedDown();
            if(count > 1000)
             count = 0;
            count++;
            repaint();
            }
      }
    catch(Exception ex){}
 }
 private void setXX(int k)
 {
  xx = k;
 }
 private void setYY(int k)
 {
  yy = k;
 }
 public void speedUp()
 {
  speed = 8;
 }
 public void speedDown()
 {
  speed -= 1;
  if(speed <= 0)
   speed = 2;
 }
 private void newLocation()
 {
  Point p = getLocation();
  JPanel panel = (JPanel)getParent();
  if(p.x <= 0)
  {
   setXX(1);
   speedUp();
  }
  if(p.y <= 0)
  {
   setYY(1);
   speedUp();
  }
  if(p.x + getWidth() > panel.getWidth())
  {
   setXX(-1);
   speedUp();
  }
  if(p.y + getHeight() > panel.getHeight())
  {
   setYY(-1);
   speedUp();
  }
  setLocation(p.x + xx, p.y + yy);
 }
}

--------------------
Список всех полезных программ в ОДНОЙ программеhttps://sites.google.com/site/coolprogramms...latnyh-programm...Пьяные белазисты в карьереhttp://www.youtube.com/watch?v=6FGNGMwxJZ4
PM WWW   Вверх
Nofate
Дата 30.4.2010, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 266
Регистрация: 13.10.2008

Репутация: 4
Всего: 8



Моя интерпретация

Код

package Rab;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class RabFig extends JFrame //класс RabFig наследуется от JFrame (окошко)
{
    public RabFig()  //конструктор класса
       {
          add(new MyPanel()); //метод, выводит нашу панельку на экран
          pack();   // пинает менеджер компоновки, дабы он пересчитал позиции всех вложенных визуальных компонент
       }
    public static void main()//ф-я MAIN()
      {
         new RabFig().setVisible(true); //отображение окна со всеми параметрами
      }
}
class MyPanel extends JPanel //класс MyPanel  наследуется от JPanel (панелька)
{
    RevolvingFigure rf;//, rf2;
    MyPanel() //конструктор (кто-то украл модификатор доступа)
    {
        setLayout(null); //убираем какой бы то ни было менеджер компоновки
        setPreferredSize(new Dimension(340, 340));//установка размера окна
        rf = new RevolvingFigure(60, 4, 2, 1);//создание объекта(сторона,скругление,скорости вращения по осям)
        rf.setBounds(20, 20, rf.getPreferredSize().width,
        rf.getPreferredSize().height); //очевидно, задаем размеры вращающегося тела
        add(rf);//добавьть наш квадрат на экран
        
        //Треугольник
        //rf2 = new RevolvingFigure(50, 3, 2, -1);
        // rf2.setBounds(320, 120, rf.getPreferredSize().width,
        // rf.getPreferredSize().height);
        //add(rf2);
    }
}
class RevolvingFigure extends JComponent implements Runnable // класс RevolvingFigure  наследуется от JComponent  и реализует интерфейс Runnable (стало быть его будут использовать в отдельном потоке)
{
 int radius, tops, speed, direction;
 double angle = 0;
 private int xx = 1, yy = 1;

 RevolvingFigure(int radius, int tops, int speed, int direction) //таки конструктор без модификатора доступа
     {
      this.radius = radius;
      this.tops = tops;
      this.speed = speed;
      this.direction = direction;
      setPreferredSize(new Dimension(radius * 2, radius * 2));
      new Thread(this).start();//запуск нашего потока. то есть по окончании создания объекта мы тут же начинаем в отдельном потоке выполнять метод run
     }
 private Point [] getTops()
     {
      Point [] p = new Point [tops];//создаем массив вершин
      double alpha = Math.PI * 2 / tops;
      for(int i = 0; i < tops; i++)
      {
      double x = Math.cos(alpha * i + Math.toRadians(angle)) * radius;//координаты вершин
      double y = Math.sin(alpha * i + Math.toRadians(angle)) * radius;
      p [i] = new Point((int)x + radius, (int)y + radius);
      }
      return p;
     }
 public void paintComponent(Graphics g) //походу отрисовка объекта через Graphics 
     {
      Graphics2D g2 = (Graphics2D)g;
      g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                          RenderingHints.VALUE_ANTIALIAS_ON);
      Point [] p = getTops();
      for(int i = 0; i < p.length - 1; i++)
       g2.drawLine(p [i].x, p [i].y, p [i + 1].x, p [i + 1].y);
      g2.drawLine(p [p.length - 1].x, p [p.length - 1].y, p [0].x, p [0].y);
     }
 public void run() 
 {
    try
      {
      int count = 50;
      while(true) //основной рабочий цикл летающего тела
            {
            Thread.currentThread().sleep(20);    //делаем небольшую паузу
            angle += speed * direction;           //вычисляем новый угол из (угловой?) скорости и направления вращения
            if(angle >= 360 || angle <= -360)  //свертка угла по модулю 360
             angle = 0;
            newLocation();                           //обновление координат
            if(count % 50 == 0)      //занятный фрагмент:
             speedDown();             //каждые 50 кадров мы замедляем объект
            if(count > 1000)           //проще имхо считать от 50 до 0. сэкономили бы одну-две строки ))
             count = 0;
            count++;
            repaint();                 //прорисовка в новых координатах
            }
      }
    catch(Exception ex){}
 }
 private void setXX(int k)
 {
  xx = k;
 }
 private void setYY(int k)
 {
  yy = k;
 }
 public void speedUp()
 {
  speed = 8;
 }
 public void speedDown()
 {
  speed -= 1; 
  if(speed <= 0)
   speed = 2;
 }
 private void newLocation()
 {
  Point p = getLocation();
  JPanel panel = (JPanel)getParent();
  if(p.x <= 0)
  {
   setXX(1);
   speedUp();
  }
  if(p.y <= 0)
  {
   setYY(1);
   speedUp();
  }
  if(p.x + getWidth() > panel.getWidth())
  {
   setXX(-1);
   speedUp();
  }
  if(p.y + getHeight() > panel.getHeight())
  {
   setYY(-1);
   speedUp();
  }
  setLocation(p.x + xx, p.y + yy);
 }
}



--------------------
The future is not set, there is no fate but what we make for ourselves.
Нофейтово пространство и смежные области 
PM MAIL WWW ICQ   Вверх
dorogoyIV
Дата 30.4.2010, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: 3
Всего: 46



Цитата(Nofate @  30.4.2010,  15:19 Найти цитируемый пост)
      while(true) //основной рабочий цикл летающего тела            {            Thread.currentThread().sleep(20);    //делаем небольшую паузу            angle += speed * direction;           //вычисляем новый угол из (угловой?) скорости и направления вращения            if(angle >= 360 || angle <= -360)  //свертка угла по модулю 360             angle = 0;            newLocation();                           //обновление координат            if(count % 50 == 0)      //занятный фрагмент:             speedDown();             //каждые 50 кадров мы замедляем объект            if(count > 1000)           //проще имхо считать от 50 до 0. сэкономили бы одну-две строки ))             count = 0;            count++;            repaint();                 //прорисовка в новых координатах


здесь раз в 50 итераций, которые совершаются каждые 20 миллисекунд происходит замедление вращения.
считаем: 50 * 20 = 1000 миллисекунд = 1 секунда

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0459 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.