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

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

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

Главная » Статьи » Графика

Как загружать картинки в игру?

Как загружать картинки в игру?

 

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

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

Перед тем как использовать тот или иной способ нужно определится какие форматы картинок Вы собираетесь использовать? Может это будут gif, bmp, jpg, jpeg, ico, pic и другие. Для новичков я советую использовать bmp. С ним легко работать. Его можно загружать как в память так и в графические компоненты. Но качество картинок в формате bmp желает лучшего, конечно. Это потому, что изображение картинки строится с помощью квадратиков. Такую графику еще называют пиксельной. Так рисовались игры для игровых приставок Dendy, Sega и другие.

Итак начнем. Допустим, мы решили все же работать с форматом bmp. Нам нужно загрузить картинку – текстура земли, к примеру. Для начала давайте придумаем название переменной, которая будет хранить эту картинку. Я назову ее Ground. Первым делом эту переменную нужно объявить. Это делается в разделе var.

 

Var

Ground:TBitmap;

 

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

 

//sozdanie uchastka pamati dlya hraneniya kartinki

Ground:=Tbitmap.Create;

//esli fon kartinki dolzhen bit prozrachnim to ukazivaem eto tak, no v nashem sluchae eta stroke ne nuzhna

Ground.Transparent:=true;

//zagruzka samoy kartinki

Ground.LoadfromFile(‘C:\game\img\ground.bmp’);

 

Данный код можно пометить например в событие формы OnCreate.  Оно выполняется когда запускается наше приложение и создается форма на которой мы будем рисовать. Поэтому было бы правильно сразу же и загрузить необходимую нам графику. Наша картинка загружена и готова к использованию. Разберемся как нам ее нарисовать. Можно расположить кнопку на форме, дважды кликнуть по ней и написать нужный код для прорисовки картинки. А можно расположить компонент Timer, дважды кликнуть по нему и написать нужный код там. Тогда прорисовка нашей картинки будет зациклена и будет рисоваться (обновляться) со скоростью, указанной в самом компоненте Timer. Я использую последний метод, обычно.

 

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

 

Этот код обозначает, что мы рисуем картинку, которая хранится в переменной Ground на канве (место для рисования на форме) с координатами 0 – по оси координат х и 0 – по оси у. Так же можно загружать все одиночные картинки например изображения кнопки или обьекта, который не имеет картинок  анимации, а только одну картинку для отображения его и все.

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

 

Player1:=Tbitmap.Create;

Player1.Transparent:=true;

Player1.LoadfromFile(‘img\player1.bmp’);

Player2:=Tbitmap.Create;

Player2.Transparent:=true;

Player2.LoadfromFile(‘img\player2.bmp’);

Player3:=Tbitmap.Create;

Player3.Transparent:=true;

Player3.LoadfromFile(‘img\player3.bmp’);

 

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

 

Var

i:integer;

Player:array[1..3] of  TBitmap;

 

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

 

For i:=1 to 3 do

Begin

Player[i]:=Tbitmap.Create;

Player[i].Transparent:=true;

Player[i].LoadfromFile(‘img\player’+inttostr(i)+’.bmp’);

End;

 

Согласитесь это проще, а особенно если картинок будет не 3, а гораздо больше. Больше ничего дописывать не надо будет, только изменить цифры в цикле. Правда картинки в нашем случае должны называться Player1.bmp, Player2.bmp, Player3.bmp.

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

 

Var

i,j:integer;

Vrag:array[1..3, 1..5] of TBitmap;

 

Далее загружаем наши картинки:

 

For i:=1 to 3 do

For j:=1 to 5 do 

Begin

Vrag[i,j]:=Tbitmap.Create;

Vrag[i,j].Transparent:=true;

Vrag[i.j].LoadfromFile(‘img\vrag’+inttostr(i)+inttostr(j)+’.bmp’);

End;

 

Теперь наши картинки должны называться как vrag11.bmp,vrag12.bmp,vrag13.bmp,vrag21.bmp,vrag22.bmp… и так далее. Так первая цифра может обозначать номер монстра, а вторая номер его картинки.

 

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

 

Var

i,j,k:integer;

Pers:array[1..3, 1..4,1..3] of TBitmap;

 

Далее загружаем наши картинки:

 

For i:=1 to 3 do

For j:=1 to 5 do

For k:=1 to 3 do

Begin

Vrag[i,j,k]:=Tbitmap.Create;

Vrag[i,j,k].Transparent:=true;

Vrag[i.j,k].LoadfromFile(‘img\pers’+inttostr(i) +inttostr(j)+ inttostr(k)+’.bmp’);

End;

 

Теперь наши картинки называются как pers111.bmp, pers112.bmp, pers113.bmp, pers211.bmp, pers212.bmp и так далее. В этом случае первая цифра означает номер персонажа или его вид, вторая – номер поворота (1-лево, 2-право, 3-вверх, 4-вниз), третья – номер картинки для этого поворота.

Сначала указываем начальные данные PersNum – номер или вид персонажа, PersPovorot – в какую сторону персонаж повернут, PersAnim – номер картинки анимации персонажа для нужной стороны, в которую повернут персонаж.

 

PersNum:=1;

PersAnim:=1;

PersPovorot:=1;

 

Рисовать данные картинки можно по таймеру примерно так:

 

If Pers.Povorot=1 then form1.canvas.draw(Persx,Persy,Pers[PersNum, PersPovorot, PersAnim]);

PersAnim:=PersAnim+1;

If PersAnim>3 then PersAnim:=1;

 

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

Теперь по поводу формата jpg,jpeg. Чтобы использовать картинки данного типа нужно в разделе uses в самом верху дописать jpeg. После этого этим форматом можно пользоваться, как и форматом bmp.

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

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

 

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

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

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