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

Программирование с нуля - это совсем просто! 143) Программирование спрайтовых игр: Разное


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

143) Программирование спрайтовых игр: Разное

Последний выпуск по BlitzBasic был N 137.

Аварийное завершение программы

В процессе отладки бывает полезным прерывать ее работу в случае, если выявлена непредвиденная ошибка (например, не найден нужный файл). Таким средством является команда

RuntimeError message$

Она показывает текст сообщения (параметр) во всплывающем окошке, после закрытия которого программа завершается.

Воспроизведение анимационных роликов

Воспроизведение анимационных роликов часто применяется, например, при проигрыше начальных, заранее подготовленных заставок. Такие ролики должны быть заранее подготовлены в формате AVI, MPEG (при наличии видеокодека), также анимированного GIF.

Команда

OpenMovie( file$ )

загружает ролик (путь к соответствующему файлу указан в качестве параметра), после чего сразу же его воспроизводит от начала до конца, если он выполнен в формате AVI/MPEG.

Функция возвращает идентификатор ролика (по аналогии с функциями открытия файлов).

favi = OpenMovie( "rolik.avi" )

По завершении работы с роликом его необходимо закрыть (при этом автоматически освободится отведенная для него память) командой CloseMovie( идентификатор-ролика ):

CloseMovie( favi )

Каждый кадр ролика, если он подготовлен в формате GIF, необходимо показывать командой (с учетом интервала времени между кадрами)

DrawMovie movie,x,y,w,h

где movie- идентификатор загруженного ролика, x,y - координаты левого верхнего угла ролика на экране, w,h - размеры окна, в которых масштабируется ролик.

Если показывается AVI/MPEG-ролик, то в момент вызова DrawMovie отображается не очередной кадр, а наиболее подходящий к текущему моменту времени, потому что эти форматы позволяют показывать кадры только со скоростью, которая уже хранится в самом файле и неизменяема. А в случае с GIF-анимацией все параметры воспроизведения можно контролировать программно.

Проверить, не закончен ли ролик (анимация продолжается, невоспроизведенные кадры еще есть) можно с помощью функции MoviePlaying( movie ).

Функции MovieWidth(movie) и MovieHeight(movie) возвращают ширину и высоту кадров ролика в пикселах.

Пример

В следующем примере описаны способы работы с GIF-роликом - его воспроизведения, масштабирования, перемещения по экрану.

  const WIDTH = 800
  const HEIGHT = 600

  Graphics WIDTH, HEIGHT
  SetBuffer BackBuffer()
   
  ; загрузка gif-анимации
  movie=OpenMovie("hat.gif")

  ; если ролик не загружен или не запустился...
  if movie=0 then RuntimeError "Ролик не загружен!"

  if Not(MoviePlaying(movie)) then RuntimeError "Ролик не запускается!"

  ; Смотрим размер ролика
  w=MovieWidth(movie)
  h=MovieHeight(movie)

  ; показываем примерно в центре экрана
  x=(WIDTH-w)/2
  y=(HEIGHT-h-100)/2
   
  period=100 ; интервал между кадрами, мс
  time=MilliSecs()

  ; главный цикл
  Repeat

  Repeat
   ; ждем время интервала
  Until MilliSecs()-time>=period

  time=MilliSecs()

  ; скорость изменения
  ; если нажата CTRL то размер сдвига change увеличиваем
  if KeyDown(29) or KeyDown(157) then
  change=5
  else
  change=1
  end if

  ; если нажата SHIFT то меняем размер на экране
  if KeyDown(42) or KeyDown(54) then
  if KeyDown(203) and w>change-1 then w=w-change
  if KeyDown(205) and x+w+change < WIDTH then w=w+change
  if KeyDown(200) and h>change-1 then h=h-change
  if KeyDown(208) and y+h+change < HEIGHT then h=h+change

  ; иначе меняем позицию на экране
  else
  if KeyDown(203) and x>change-1 then x=x-change
  if KeyDown(205) and x+w+change < WIDTH then x=x+change
  if KeyDown(200) and y>change-1 then y=y-change
  if KeyDown(208) and y+h+change < HEIGHT then y=y+change
  EndIf

  ; клавиши +/- изменить скорость показа, длину периода между
  кадрами
  if ( KeyDown(13) or KeyDown(78) ) and period>change then
  period=period-change
  if ( KeyDown(12) or KeyDown(74) ) and period < 500 then
  period=period+change

  Cls

  ; рисуем очередной кадр
  DrawMovie movie,x,y,w,h
   
  Text 0,100, x + ","+ y + "," + w + "," + h
  Flip

  Until KeyHit(1)

  ; закрываем ролик
  CloseMovie(movie)

  end


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

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

Неофициальный сайт поддержки (со срочными вопросами - сюда):
www.prog-begin.net.ru.


Вышел мой учебный курс "Технологии Delphi. Разработка приложений для бизнеса".
http://shop.piter.com/book/978591180282/

Учебный курс рассчитан не только на разработчиков, но и на всех тех, кто хочет стать ИТ-менеджером. Для этого как минимум нужно иметь общее представление о современных технологиях разработки и их истории и владеть соответствующей терминологией.
В книге описаны десятки технологий, каждой из которых посвящены отдельные книги. Таким образом, купив одну мою книгу, вы существенно сэкономите :) В книге полностью описан язык Delphi (версия 2006, полностью совместимая с Turbo Delphi) для обеих платформ - Win32 и .NET. Охвачены также темы работы с файлами на этих платформах, создания файл-серверных, клиент-серверных, распределенных приложений, веб-программ (Indy, ASP.NET, веб-сервисы). Описаны языки SQL и OCL. Немало глав посвящены истории программирования и различных технологий. Особое внимание уделено созданию программ с помощью технологии ECO и языка моделирования UML - программы фактически рисуются, и теперь даже для создания корпоративных приложений и их переноса в Интернет не обязательно знать программирование!
Отдельная часть отведена технологиям организации групповой работы, управления требованиями, контроля версий, локализации и тестирования.
Тут подробнее про книгу.

Другие мои книги, которые пока доступны в продаже:


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


В избранное