Компьютерные книги
Главное меню
Главная Поиск по сайту Добавить материал О нас Карта книг Карта сайта
Реклама
computersbooks.net -> Добавить материал -> Языки программирования -> Бишоп Д. -> "Эффективная робота Java 2" -> 189

Эффективная робота Java 2 - Бишоп Д.

Бишоп Д. Эффективная робота Java 2 — Спб.: Питер, 2002. — 592 c.
ISBN 966-552-107-1
Скачать (прямая ссылка): effektivnayarabotajava2002.djvu
Предыдущая << 1 .. 183 184 185 186 187 188 < 189 > 190 191 192 193 194 195 .. 259 >> Следующая

Тонкость заключается в том, что слушатели — это абстрактные интерфейсы, а при использовании интерфейса мы должны обеспечить реальные версии всех его абстрактных методов, даже если их не применяем. Поэтому, чтобы обнаружить нажатие мыши, необходимо определить метод mousePressed, а также пустые версии всех остальных относящихся к мыши четырех методов, которые присутствуют в классе MouseListener. Чтобы сэкономить время, в пакет java.awt.event для каждого абстрактного интерфейса-слушателя включена его реализация, называемая адаптером (adapter). Абстрактный класс-адаптер предоставляет пустые версии всех методов слушателя. Затем, вместо реализации слушателя, мы наследуем адаптер и переопределяем все методы, которые нам действительно нужны. На рис. 12*7 показано, как эта последовательность действий применяется к двум слушателям мыши, которые используются для связанных с мышью событий. Во всех методах в качестве параметра указывается класс MouseEvent.
г
432
Глава 12, Апплеты в действии
¦ mouse Pressed , і_____________________J
і—c>j_ _ _ MouseAdap
mouse Cfr eked mouseEntered mouse Exited t mouse Pressed і mouse Released
L
L _Wouseiistener_ _]
* mouseCTicked (
j mouseEntered ]
і mousaExfted j
1 mousePrsssed [
mouse Released
Mo us в MotfonA dapter (
mouseD ragged mouse Moved
і і
MouseMotlonListener
і mouseDragged j
j mouseMoved i
Рис 12.7. Схема, иллюстрирующая отношения между слушотелями и адаптерами,
предназначенными для роботы с мышью
Поэтому, если вы хотите, чтобы апплет “слушал мышь” (т.е., чтобы в ответ на события мыши он выполнял определенные действия), в его метод init необходимо включить оператор
this.addMouseListemer(new MouseHandlenО ) ;
а также внутренний класс MouseHandler, в котором определяется метод mousePressed, обрабатывающий событие (нажатие кнопки мыши). В следующем примере демонстрируется использование обоих слушателей, предназначенных для работы с мышью,
MouseListener и MouseMotionListener.
Поймать гнома
Задача. Создать простую игру, которая состоит в том, что пользователь “преследует” и *ловит” (щелкая мышью) изображение, перемещающееся по экрану. В игре должны присутствовать звуковые эффекты.
Решение. В первую очередь нам нужны один gif-файл и два au-файла, один из которых предназначен для озвучивания "поимки” гнома, а другой — для неудачной попытки. Из опыта можем порекомендовать следующее: gif-файлы должны быть не больше 10 Кбайт, а au-файлы (для нормального воспроизведения) не меньше 6 Кбайт. Это минимальные требования, но вполне возможноу что ваш компьютер может оперировать файлами гораздо больших объемов. Мы должны вывести изображение на экран и позволить игроку преследовать его с помощью мыши. Если пользователю удалось поймать гнома, это сопровождается одним звуком, если не удалось и он “промазал” — другим. Чтобы усилить впечатления, выведем соответствующие сообщения.
Алгоритм, Метод апплета, предназначенный для перемещения изображения, работает следующим образом. После того как изображение извлечено и выведено на экран, мы можем получить его длину и ширину. Когда пользователь щелкает кнопкой мыши, метод getiD возвращает константу mouse_pressed (в некоторых книгах она называется mouse_down), и можно проверить, находятся ли текущие координаты мыши в области, определяемой текущими координатами изображения. Отреагировав на событие соответствующим звуком и сообщением, мы обновляем экран, заставляя изображение переместиться. Перемещение изображения выполняется путем добавления к координатам произвольного значения, которое передается в метод draw image,
Звук и изображения
433
С помощью метода shows tat us в строку состояния окна броузера выводится сообщение. При выполнении апплета в программе просмотра апплетов сообщение не
появляется.
Рассмотрим работу программы в динамическом режиме. Когда же фактически перемещается изображение? Очевидно, что с выведенным изображением ничего не должно происходить до тех пор, пока не произойдет соответствующее событие. Поэтому изображение остается неподвижным до начала перемещения мыши* Каждый раз, когда апплет обнаружит перемещение мыши {событие, в результате которого метод get ID возвращает константу mquse_moved), он может перечертить экран. Перечерчивание включает в себя изменение координат х и у изображения, поэтому создается впечатление, что оно перемещается произвольно* и у нас есть возможность “преследовать** это изображение* Для того чтобы игра выглядела реалистично, будем перемещать изображение только тогда, когда текущие координаты позиции курсора мыши кратны 3.
Программа. Программа соответствует алгоритму и описаниям, которые приведены выше.
import java.awt.*; import java.awt.event.*; import j ava. applet. * ,*
public class CatchM extends Applet {
/* Программа "Поймать гномаг| Автор Дж, М. Бишоп, октябрь 1996 г.
* = = = = « = = = = = = = - Java 1.1 январь 2 996 г.
Предыдущая << 1 .. 183 184 185 186 187 188 < 189 > 190 191 192 193 194 195 .. 259 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

Эком "Microsoft Excel 2000 шаг за шагом Русская версия самоучитель " (Самоучитель)

Поляков А.Ю. "Методы и алгоритмы компьютерной графики в примерах Vizual C++" (Графика)

Баяковский Ю.М. "Графическая библиотека Open GL " (Графика)

Валиков А. "Технология " (Языки программирования)
Авторские права © 2013 ComputersBooks. Все права защищены.