Программирование мобильных телефонов на 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.9. Циклическое передвижение объекта по экрану



    В листинге 7.5 был нарисован синий квадрат и перемещен один раз вдоль оси  X горизонтально слева направо. Но иногда в играх необходимо циклично передвигать объект, используя его, например, в качестве мишени.

    Возьмем за основу код из листинга 7.5, где перемещается квадрат, и сделаем так, чтобы после пересечения всего экрана и исчезновения, он снова появлялся с другой стороны, создавая подобие циклического перемещения. Алгоритм решения этой задачи заключается в том, чтобы узнать, когда квадрат выйдет из области видимости и в тот же момент нарисовать его с другой стороны экрана и вновь переместить по экрану. Для этого создадим переменную end и присвоим ей значение окончания экрана найденное методом getwidth () (движение происходит по ширине экрана).

    int.end = getwidth();


    В методе run () в самом начале цикла while будем производить постоянное сравнение позиции квадрата с окончанием экрана:

    if (position > end)
    
    {
    
    position = 0; 
    
    } 


    Как только квадрат будет выходить из области экрана, его позиция обнулится и квадрат снова будет нарисован в первоначальной позиции, что зациклит движение квадрата. В листинге 7.6 представлен исходный код решающий эту задачу.

    /** 
    
    Листинг  7.6 
    
    Класс Main и luiacq.Draw 
    
    */ 
    
    import javax.microedition.lcdui.*; 
    
    import javax.microedition.midlet.*;
    
    public class Main 
    
    extends MIDlet implements CommandListener
    
     { 
    
    // команда выхода из программы 
    
    private Command 
    
    exitMidlet = new Command("Выход",Command.EXIT, 0); 
    
    public void 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 commandAction(Command c, Displayable d) 
    
    { 
    
    if (c == exitMidlet) { 
    
    destroyApp(false); notifyDestroyedt) ;
    
     } 
    
    } 
    
    } 
    
    /**
    
     класс Draw определен в файле 
    
    Draw.Java циклическое появление квадрата 
    
    */ 
    
    import javax.microedition.Icdui.*; 
    
    public class 
    
    Draw extends Canvas implements Runnable 
    
    { 
    
    // позиция для перемещения квадрата 
    
    int position = 10; 
    
    // узнаем ширину экрана 
    
    int end = getwidth(); 
    
    // конструктор 
    
    public Draw() 
    
    { super(); } 
    
    public void start ()
    
    { 
    
    // создаем и запускаем поток 
    
    Thread t = new Thread(this); 
    
    t.start(); } 
    
    // метод run интерфейса Runnable
    
     public void run()
    
     {
    
    // бесконечный цикл 
    
    while (true) 
    
    { 
    
    // сравниваем позицию квадрата 
    
    if(position > end) 
    
    {
    
    // обнуляем позицию квадрата position = 0;
    
     } 
    
    // увеличиваем позицию на 1 
    
    position ++; 
    
    // обновляем экран 
    
    repaint() ;
    
    // останавливаем цикл на 20 миллисекунд 
    
    try { Thread.sleep(20); } 
    
    catch (Java. lang. InterruptedException zxz) {} 
    
    ) } 
    
    public void paint(Graphics g) 
    
    { 
    
    // вычисляем область для перерисовки экрана 
    
    int x = g.getClipWidth(); 
    
    int у = g.getClipHeight(); 
    
    // устанавливаем белый цвет фона
    
    g.setColor(0xffffff); 
    
    // назначаем перерисовку всему экрану 
    
    g.fillRect(0,0,х,у); 
    
    //устанавливается синий цвет квадрата 
    
    g.setColor(0, 0, 200);
    
     // рисуем квадрат 
    
    g.fillRect(position,40, 20, 20); 
    
    }
    
     }
     
    -
    



    Copyright © vzlom-1.ru 2020-2021