Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Программирование с нуля - это совсем просто! 112) Cпрайтовые игры: Управление мышкой и коллизии


Школа программирования

112) Программирование спрайтовых игр: Управление мышкой и коллизии

Последний выпуск по спрайтовым играм - был в выпуске N 109.

Управление мышкой

По аналогии с командами ввода с клавиатуры в BlitzBasic существуют и команды обработки состояния мыши. Это:

MouseDown - возвращает true, если нажата соответствующая клавиша мыши;
MouseHit - число нажатий клавиши мыши с момента последнего вызова данной функции;
WaitMouse - ожидает нажатие клавиши мыши и возвращает код клавиши.

Первые две функции получают в качестве параметра код клавиши мыши - 1 = левая клавиша, 2 = правая клавиша, 3 = средняя клавиша. Последняя функция параметров не имеет.

Коллизии

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

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

Функция ImagesOverlap() возвращает true, если два спрайта, заданные в качестве параметров, пересеклись друг с другом. Такое пересечение двух игровых объектов называется коллизия.
Важно, что работает эта функция очень быстро. Но она рассматривает пересечение спрайтов без учета в них прозрачных пикселов (фактически - лишь пересечение прямоугольников в границах спрайтов). Существует другая версия данной функции - ImagesCollide, которая учитывает прозрачные элементы в спрайте (касание прозрачными пикселами не засчитывается как коллизия). Но выполняется она уже медленнее.

Первый параметр функции - идентификатор первого спрайта, затем - текущие координаты его местонахождения на экране, с четвертого по седьмой - такая же информация о втором спрайте.

Рассмотрим программу, в которой два спрайта случайным образом перемещаются по экрану. Как только возникает коллизия (они соприкоснулись/наложились друг на друга), программа выдает сообщение и ожидает нажатия на любую клавишу мыши.

  Graphics 640,480,16
  SetBuffer BackBuffer()

  s1=LoadImage("a.bmp")
  s2=LoadImage("b.bmp")

  while not KeyHit(1)

  Cls
  x1=rnd(640)
  y1=rnd(480)
  x2=rnd(640)
  y2=rnd(480)
  DrawImage s1,x1,y1
  DrawImage s2,x2,y2

  if ImagesOverlap(s1,x1,y1,s2,x2,y2) then
   Text 100,200,"Контакт!"
   Flip
   WaitMouse
  end if

  Flip

  Wend

В переменных x1,y1,x2,y2 хранятся координаты вывода каждого из спрайтов.

Задание. Модифицируете данную программу, добавив в нее третий спрайт, координата которого будет определяться координатами курсора мыши (то есть управлять им будет человек). Программа должна делать паузу, только если спрайт, управляемый человеком, коснулся любого из первых двух спрайтов. Их взаимоколлизия (коллизия первых двух спрайтов) не должна приводить к остановке.


В продаже моя книга "Delphi 2006: новые возможности"
Введите в яндексе "бобровский delphi" и выберите подходящую цену.
В книге рассмотрены новые возможности системы программирования Delphi 2006 и представлены нововведения в языке, оболочке, редакторе, компиляторе и отладчике. Объяснены новые технологии работы с базами данных и создания приложений для Интернета. Особое внимание уделено средствам и технологиям повышения эффективности работы программистов: рефакторингу, шаблонам проектирования, унифицированному языку UML и технологии моделирования ECO.
Издание рассчитано на программистов всех уровней подготовки. Начинающие разработчики познакомятся с удобными средствами быстрого создания программ, программисты средней квалификации изучат современные подходы к разработке сложных систем и новые средства визуального проектирования, а профессионалам будут интересны новые возможности технологий моделирования ECO III, UML 2.0 и паттернов проектирования.


(c) 2004-2006 Сергей Бобровский bobrovsky at russianenterprisesolutions.com

Школа программирования с нуля
Все предыдущие выпуски базового курса всегда тут:
http://www.infiltration.ru/p/

Дизайн рассылки: Алексей Голубев - Web-дизайн и web-программирование


В избранное