Меню сайта
Форма входа

Категории раздела
Уроки по созданию игр [38]
Программирование игр разной сложности
Игровые алгоритмы [24]
Алгоритмы, которые уже реализованы для разных жанров игр
Графика [5]
Учимся работать с графикой в Делфи
Мультимедиа [3]
Работа с мультимедийными возможностями Делфи
Другие статьи [18]
Статьи не вошедшие не в один из разделов
Ошибки [4]
Всевозможные ошибки и пути их решения
Понедельник, 29.04.2024, 19:13
Приветствую Вас Гость

Статьи по программированию

Главная » Статьи » Игровые алгоритмы

Приближение и масштабирование камеры на игрока

Приближение и масштабирование камеры на игрока.

 

При создании игр, как двухмерных так и трехмерных, иногда возникает необходимость приближать персонажа. Например, во время диалогов с компьютерными персонажами, во время битв или каких-то других моментов. Реализовать такой момент очень даже не сложно. И мы сейчас об этом поговорим подробней.

 

Если у Вас игра трехмерная. То для работы с камерой есть графический движок GlScene. Нужно будет установить данную библиотеку, создать объект – камеру на сцене и просто управляя координатами данного объекта можно приближать или отдалять камеру. Думаю проблем с этим не возникнет.

 

А вот, если игра двухмерная, тогда другой разговор. Для эффекта приближения или отдаления камеры нужно будет масштабировать игровую карту. Вместо использования:

 

Form1.Canvas.Draw(0, 0, Pic);

 

Нужно будет использовать прорисовку с растягиванием или сжатием игровой области. То есть будет рисоваться та же картинка или набор картинок, но они будут растянуты или сжаты до тех размеров, которые мы укажем. В идеале нужно рисовать сначала не на форме, а на пустой картинке, созданной динамически в программе. Это делается так. Сначала объявляем переменную, на которую будем все рисовать:

 

Var

Buf:TBitmap;

 

Далее нужно выделить память для такой картинки и создать ее. Это изображение будет играть роль графического буфера. То есть все картинки будут рисоваться на него, а затем полностью этот буфер мы будем рисовать на форму например. Создаем буфер:

 

Buf:=TBitmap.Create;

Buf.Width:=800;

Buf.Height:=600;

 

Обратите внимание! Задавать размеры графическому буферу строго обязательно, иначе Вы ничего не увидите из того, что нарисуете на него. Поскольку мы создаем пустую картинку, то программа не будет знать какой размер для нее нужно будет задать. Далее в привычном уже для Вас случае просто рисуете на Ваш буфер нужные изображения так, как это делалось ранее на форму или на этот же буфер.

 

Теперь чтобы приблизить камеру в два раза нужно будет использовать прорисовку с рястягиванием:

 

Form1.Canvas.StretchDraw(Rect(0,0,1600,1200));

 

В данном случае StretchDraw говорит о том, что будет использоваться прорисовка с растягиванием или сжатием то есть с масштабированием. Далее Rect(0,0,1600,1200) указывает, что нужно нарисовать наш буфер в координатах (0,0) и относительно этих координат растянуть изображение до координат (1600,1200), в два раза получается.

 

Но учтите, что теперь ваш персонаж сдвинется тоже, так как изображение стало больше. Поэтому кроме приближения нужно будет еще и сделать смещение данного буфера в отрицательные координаты. Таким образом Вы сможете отцентрировать карту на персонаже. Пример такого отцентрирования может быть следующим, но учтите, что смещение взято случайным образом:

 

Form1.Canvas.StretchDraw(Rect(-800,-600,800,600));

 

Так выходит, что размер растянутого буфера остался как и прежде, но теперь его прорисовка начинается в координатах (-800, -600) и растягиваться будет до координат (800,600). Проще говоря мы в 2 раза увеличили изображение и в половину сместили его, чтобы смотреть на центр этого изображения.

 

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

 

Автор: Соколов Виталий

Источник: delgame.at.ua

Категория: Игровые алгоритмы | Добавил: Armageddets (25.02.2015) | Автор: Приближение и масштабирование камер
Просмотров: 1518 | Теги: Приближение и масштабирование камер, растягивание и сжатие картинки, работа с камерой | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Наш опрос
Оцените мой сайт
Всего ответов: 103
Мини-чат
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Статистика

    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0