Четверг, 28 Марта 2024, 17:28

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Программирование » Delphi/Pascal/Object Pascal » Анимация в Delphi (Изменение картинки imagelist и тому подобное)
Анимация в Delphi
FerasetДата: Вторник, 18 Сентября 2012, 11:10 | Сообщение # 1
Издание игр
Сейчас нет на сайте
Всем привет. Не получается проанимировать картинку в Delphi 7. Пробовал с imagelistom но там картинка только всплывает и не меняется.
Вот примерный код.
var
Index: integer; //индекс картинки в ImageList
begin
Index:=0; // берем 1-ю картинку и вставляем в Image1
Imagelist1.GetBitmap(Index, Image1.Picture.Bitmap);
end;


Спасибо пользователю TimCruz, за то что научил меня спокойствию, терпимости и вере в цели.

TimKruzДата: Вторник, 18 Сентября 2012, 13:36 | Сообщение # 2
старожил
Сейчас нет на сайте
Ох... Ну если хочешь использовать ImageList, то тогда вот:
Code
procedure TForm1.Timer1Timer(Sender: TObject);
begin
   //Закрашиваем картинку в image1 (по-умолчанию кисть белая, а ручка - чёрная,
   //и чтобы не было видно чёрной линии можно отступить за край картинки, но можно просто задать цвет ручки белым)
   image1.Canvas.Rectangle(-1,-1,image1.Width+1,image1.Height+1);
   imagelist1.Draw(image1.Canvas,0,0,i); //Рисуем картинку с индексом i в точке (0;0) на канве image1
   inc(i); //Увеличиваем счётчик кадра на 1
   if i=5 then i:=0; //Если дошли до последнего кадра (всего кадров 5, с 0 до 4) - обнуляем счётчик,
   //т.е. зацикливаем анимацию
end;

Естественно, тебе понадобится таймер Timer.
Ещё есть компонент Animate, но, кажется, он воспроизводит AVI-анимации (может ещё и gif, не уверен).
Quote (Feraset)
Imagelist1.GetBitmap(Index, Image1.Picture.Bitmap);

GetBitmap копирует битмап-картинку из Image1 в ImageList1 под индексом index. Но ImageList - это только контейнер для изображений, он не отображается на экране.

***
Как я понимаю, ты всё это делаешь для своей игры; тогда на таких компонентах ты не уедешь далеко. Учись пользоваться ресурсами (*.res) программы для хранения изображений, прорисовкой через bitblt (быстрая WinAPI-функция), используй мультимедийный или вообще Windows-таймер - он будет быстрее компонента типа TTimer.
А вообще, для большой игры хорошо бы совсем отказаться от VCL, потому что в современных играх она совсем не нужна и только мешает, а для прорисовки лучше использовать OpenGL или DirectX. Но для отказа от VCL нужно знать хотя бы основы построения Windows-приложений, а для разработки "настоящих" игр нужно обязательно знать, из чего игры состоят, как и в каком порядке их делают и с чем едят.
А VCL нужна и полезна только для быстрой разработки прикладных программ, но в играх использовать её бессмысленно.




Сообщение отредактировал TimKruz - Вторник, 18 Сентября 2012, 13:37
FerasetДата: Вторник, 18 Сентября 2012, 14:47 | Сообщение # 3
Издание игр
Сейчас нет на сайте
Спасибо за советы, Ко многому прислушаюсь, только от VCL отказываться пока не собираюсь, за неимением опыта. Твою процедуру обязательно посмотрю дома.(Кстати даже не подумал бы что можно сделать всё так просто с инкрементом и зацикливанием). Собственно я сейчас делаю двиг для игры+редактор, так что VCL может даже и не лишний будет. Насчёт ресурсов обязательно почитаю, буду пробовать если ты не против ещё что нибудь спрошу у тебя если будет не понятно.
С уважение Илья.


Спасибо пользователю TimCruz, за то что научил меня спокойствию, терпимости и вере в цели.

andarkyДата: Вторник, 18 Сентября 2012, 14:50 | Сообщение # 4
старожил
Сейчас нет на сайте
а у меня столько всяких наработок по Дельфи было...
я ведь с 2002 года на нем сидел по 2005, потом появился FLASH и я сменил ориентацию.

Зачем-то удалил все что у меня было по Дельфи вместе с моими работами...
так что ничем не помогу



Моя страничка по дизайну
GameDev//Design//3D
Ютубчик
FerasetДата: Вторник, 18 Сентября 2012, 14:58 | Сообщение # 5
Издание игр
Сейчас нет на сайте
Ясно

Спасибо пользователю TimCruz, за то что научил меня спокойствию, терпимости и вере в цели.

andarkyДата: Вторник, 18 Сентября 2012, 15:06 | Сообщение # 6
старожил
Сейчас нет на сайте
Feraset,
могу тебе сразу сказать что если ты этим самым хочешь игруху делать - то это ошибочный путь!
Надо DirectDraw учить.

Я помню так же безуспешно пытался средствами Дельфовского ГУИ создать что-то типа игры и ничего хорошего не получилось.
Потом я стал работать с DelphiX (обертка DirectX для Дельфи) но это был 2004 год... уже наверное что-то новое появилось и лучше...



Моя страничка по дизайну
GameDev//Design//3D
Ютубчик
TimKruzДата: Вторник, 18 Сентября 2012, 15:58 | Сообщение # 7
старожил
Сейчас нет на сайте
Quote (andarky)
Я помню так же безуспешно пытался средствами Дельфовского ГУИ создать что-то типа игры и ничего хорошего не получилось.

Ну игру-то можно сделать, что-нибудь в стиле пасьянсов, сапёра и других игр (типа онлайн-шахматы/шашки/нарды), которые вместе с Windows в комплекте... В них как раз можно чисто VCL использовать и серьёзных отличий от других способов не будет (если не считать конечного веса exe, но сегодня на это мало кто обращает внимание).
Но для создания более "продвинутых" игр это не подходит...

Хотя можно выводить 3D-картинку средствами OpenGL/DirectX и в стандартный Image, но зачем тут этот Image, когда у самой формы есть канва для рисования, а другие компоненты (типа главные/всплывающие меню, панели, кнопки/радиокнопки/чекбоксовы, всякие навороченные штуковины) не используются? Да и само окно в играх в основном выполняет минимум функций - часто оно просто растянуто на весь экран и лишено рамки...
Quote (andarky)
Потом я стал работать с DelphiX (обертка DirectX для Дельфи)

Разработку DelphiX давно забросили... И DelphiX сильно тормозит даже с небольшим числом спрайтов (штук сто) - наверное, как раз из-за инкапсуляции в компоненты. wacko
Quote (Feraset)
Собственно я сейчас делаю двиг для игры+редактор, так что VCL может даже и не лишний будет.

Редактор, конечно, можно и даже нужно делать с VCL, чтобы быстрее его доделать и приступить к разработке самой игры.


ArchidoДата: Вторник, 18 Сентября 2012, 16:18 | Сообщение # 8
Сэнсэй
Сейчас нет на сайте
Quote (TimKruz)
И DelphiX сильно тормозит даже с небольшим числом спрайтов (штук сто) - наверное, как раз из-за инкапсуляции в компоненты

Это потому что он использует древний и медленный DirectDraw, а не Direct3D.

Quote (andarky)
Надо DirectDraw учить.

Не надо, это совсем уж прошлый век.

Посмотреть можно например на Asphyre - это как раз преемник DelphiX. А также - ZenGL, DGLE, Omega, много их happy


C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
daunДата: Вторник, 18 Сентября 2012, 23:01 | Сообщение # 9
постоянный участник
Сейчас нет на сайте
Code


var  bmp:array[1..4]of TBitMap;
      h:byte=1;

procedure Tf.Timer1Timer(Sender: TObject);
begin
         f.Image1.Canvas.FillRect(f.Image1.ClientRect); //очистка
         f.Image1.Canvas.Draw(0,0,bmp[h]);
         inc(h); if h>4 then h:=1;
end;

procedure Tf.FormCreate(Sender: TObject);
var a:integer;
begin
         for a:=1 to 4 do begin
             bmp[a]:=TBitMap.Create;
             bmp[a].LoadFromFile(...);
         end;
end;

procedure Tf.FormClose(Sender: TObject; var Action: TCloseAction);
var a:integer;
begin
         for a:=1 to 4 do begin
             bmp[a].Free;
         end;
end;

FerasetДата: Среда, 19 Сентября 2012, 11:09 | Сообщение # 10
Издание игр
Сейчас нет на сайте
Quote (TimKruz)
procedure TForm1.Timer1Timer(Sender: TObject);
begin
//Закрашиваем картинку в image1 (по-умолчанию кисть белая, а ручка - чёрная,
//и чтобы не было видно чёрной линии можно отступить за край картинки, но можно просто задать цвет ручки белым)
image1.Canvas.Rectangle(-1,-1,image1.Width+1,image1.Height+1);
imagelist1.Draw(image1.Canvas,0,0,i); //Рисуем картинку с индексом i в точке (0;0) на канве image1
inc(i); //Увеличиваем счётчик кадра на 1
if i=5 then i:=0; //Если дошли до последнего кадра (всего кадров 5, с 0 до 4) - обнуляем счётчик,
//т.е. зацикливаем анимацию
end;

Зацикливание получилось. большое спасибо. biggrin


Спасибо пользователю TimCruz, за то что научил меня спокойствию, терпимости и вере в цели.



Сообщение отредактировал Feraset - Среда, 19 Сентября 2012, 11:17
Форум игроделов » Программирование » Delphi/Pascal/Object Pascal » Анимация в Delphi (Изменение картинки imagelist и тому подобное)
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг