Программирование мобильных телефонов на Java


Программирование мобильных телефонов

  • Введение
  • Глава 1. Устройство мобильных телефонов
  • Глава 2. Платформа Java 2 Micro Edition
  • Глава 3. Средства разработки мобильных приложений
  • Глава 4. Телефонные эмуляторы
  • Глава 5. Механизм работы приложений Java 2 ME
  • Глава 6. Классы пользовательского интерфейса
  • Глава 7. Программирование графики
  • Глава 8. Техника создания игр
  • Глава 9. Мобильная мультимедиа-библиотека
  • Заключение
  • Приложение 1. Основы языка Java
  • Приложение 2. Справочник по Java 2 Micro Edition

     

    Программирование на Java

  • Введение
  • Глава 1. Встроенные типы данных, операции над ними
  • Глава 2. Объектно-ориентированное программирование в Java
  • Глава 3. Пакеты и интерфейсы
  • Глава 4. Классы-оболочки
  • Глава 5. Работа со строками
  • Глава 6. Классы-коллекции
  • Глава 7. Классы-утилиты
  • Глава 8. Принципы построения графического интерфейса
  • Глава 9. Графические примитивы
  • Глава 10. Основные компоненты
  • Глава 11. Размещение компонентов
  • Глава 12. Обработка событий
  • Глава 13. Создание меню
  • Глава 14. Апплеты
  • Глава 15. Изображения и звук
  • Глава 16. Обработка исключительных ситуаций
  • Глава 17. Подпроцессы
  • Глава 18. Потоки ввода/вывода
  • Глава 19. Сетевые средства Java
  • Приложение. Развитие Java

  • 

    3fb01dc2


     

     

    7.10. Столкновение



    В предыдущем разделе 7.9 мы выведи на экран синий квадрат, задали ему вектор движения и перемещали квадрат горизонтально через весь экран. После того как квадрат исчезал, достигнув конца экрана, он циклично появлялся вновь с другой стороны. Следующий пример иллюстрирует столкновение круга и квадрата с препятствием, а именно, окончанием экрана телефона. Оба объекта рисуются независимо друг от друга по высоте экрана и перемещаются параллельно по горизонтали слева на право. По достижению конца экрана оба объекта отталкиваются от конца экрана и начинают движение в обратном направлении. Посмотрите на листинг 7.7, где приводится код программы осуществляющий эти действия. Эта программа состоит из двух файлов Main.java и Draw.java.

    /**
    
    Листинг  7.7 
    
    Класс Main и класс Draw 
    
    */ 
    
    import javax.microedition.Icdui.*; 
    
    import javax.microedition.midlet.*; 
    
    public class Main extends MIDlet implements. 
    
    CommandListener 
    
    {
    
    //команда выхода из программы 
    
    private Command exitMidlet = new Command("Выход",
    Command.EXIT, 0); 
    
    publicvoid startApp() 
    
    { 
    
    // создаем объект класса Draw Draw dr = new Draw();
    
    // запускаем поток dr.start(); 
    
    // добавляем команду выхода 
    
    dr.addCommand(exitMidlet) ;
    
    dr.setCommandListener(this); 
    
    Display.getDisplay(this).setCurrent(dr); 
    
    } 
    
    public void pauseApp() {} 
    
    public void destroyApp(boolean unconditional)} 
    
    public void сommandAction(Command c, Displayable d) 
    
    {
    
    if (c == exitMidlet)
    
    { 
    
     destroyApp(false); notifyDestroyed(); 
    
    }
    
     }
    
     }
    
    /** 
    
    класс Draw определен в файле Draw.Java
    рисует круг и квадрат 
    
    */ 
    
    import javax.microedition.Icdui.*; 
    
    public class Draw extends Canvas implements Runnable 
    
    { 
    
    // позиция для перемещения квадрата и круга 
    
    int position = 0; 
    
    // узнаем ширину экрана 
    
    int endX = getWidth(); 
    
    // конструктор 
    
    public Draw()
    
    { super(); 
    
    } 
    
    public void start() 
    
    { 
    
    // создаем и запускаем поток 
    
    Thread t = new Thread(this);
    
    t.start();
    
     } 
    
    //метод run интерфейса Runnable public void run()
    
     {
    
    // бесконечный цикл 
    
    while (true) 
    
    { 
    
    // сравниваем позицию if(position > endX) 
    
    { 
    
    //уменьшаем позицию position = endX; 
    
    } 
    
    // увеличиваем позицию на 1 position ++; 
    
    // обновляем экран repaint(); 
    
    // останавливаем цикл на 20 миллисекунд 
    
    try { Thread.sleep(20); } 
    
    catch (java.lang.InterruptedException zxz) {} 
    
    } 
    
    } 
    
    publie void paint(Graphics g)
    
    { 
    
    // вычисляем область для перерисовки экрана 
    
    int х = g.getClipWidth() ; 
    
    int у = g.getClipHeight () ;
    
    // устанавливаем желтый цвет фона 
    
    g.setColor(0xffff00); 
    
    // назначаем перерисовку всему экрану 
    
    g.fillRect(0,0,x,y); 
    
    // устанавливается синий цвет квадрата 
    
    g.setColor(0, 0, 200); 
    
    // рисуем квадрат 
    
    g.fillRect(position, 40, 20, 20); 
    
    // устанавливается красный цвет круга 
    
    g.setColor(250, 0,0); 
    
    // рисуем круг 
    
    fillArc(position, 10, 20, 20, 45, 360);
    
     } 
    
    } 


    В файле Main.java создается объект класса Draw, запускается системный поток и отражается текущий экран. Файл Draw.java содержит полную реализацию класса Draw. Начальные позиции квадрата и круга определяются переменной position, которой задано нулевое значение. Для того чтобы определить момент столкновения, необходимо знать точку или координаты препятствия. В этом примере как препятствие применяется конец экрана с правой стороны, поэтому с помощью метода getWidth () находится конец экрана.

    int  endX  = getWidth(); 


    В последствии значение переменной endx будет использовано для определения столкновения.

    Конструктор, класса Draw обращается к конструктору своего суперкласса Canvas. В методе run() и цикле while с помощью оператора отношения if происходит сравнение текущей позиции двух объектов и конца экрана.

    if   (position  >  endX) 
    
    { 
    
    position   =   endX -;
    
     }


    После того как позиция обоих объектов становится больше значения переменной endx, то есть квадрат и круг достигают конца экрана, то происходит уменьшение переменной position. Это приводит к движению объектов в обратном направлении.

    После компиляции примера на экране появятся два движущихся слева направо объекта. Мы использовали препятствие в виде одной стороны экрана, но точно таким же образом можно определить столкновение для всех сторон экрана или просто для статических объектов. Выполните эти упражнения в качестве домашнего задания, а также внимательно посмотрите на процесс работы примера из листинга 7.7, квадрат и круг все-таки не отталкиваются от кромки экрана, а исчезают. Это происходит, потому что опорная позиция объектов находится в левом верхнем углу и столкновение происходит именно с позицией объектов* Вы знаете размер круга и квадрата, подумайте как можно определить более точную точку столкновения объектов и кромки экрана.

     
    -
    



    Copyright © vzlom-1.ru 2020-2021