Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.02.2012, 16:24   #1
Anton911
Форумчанин
 
Аватар для Anton911
 
Регистрация: 23.08.2011
Сообщений: 171
По умолчанию Анимация из нескольких кадров

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

Вот создал класс анимации:
Код:
type
anAnimation=class
Name:string;
FigureType:gFigureType; //Тип фигуры данной анимации
CadrCount,AnimationSpeed:integer; //Колличество кадров и скорость анимации
CadrBitMap:array[1..40] of TBitMap; // Ну это сами кадры
end;
Код:
              //id фигуры id Анимации
var Animation:array[1..6,1..10] of anAnimation;
Cadr1:array[1..10,1..40] of TBitMap;

procedure AnimationInit();
var i,j,h:integer;
begin
for h := 1 to 40 do
Cadr1[1,h]:=TBitMap.Create;
for i := 1 to 6 do
  for j := 1 to 10 do
  begin
  Animation[i,j]:=anAnimation.Create;
  for h := 1 to 40 do
  Animation[i,j].CadrBitMap[h]:=TBitMap.Create;
  end;
for h := 1 to 40 do
Animation[1,1].CadrBitMap[h]:=Cadr1[1,h]; //Animation[1,1] Пешка id 1, номер анимации 1
end;
Код:
procedure PlayAnimation(FigureId,AnimationId,AnimationPos:integer);
begin
case aFigure[FigureId].fType of
Peshka:
  begin

    aFigure[FigureId].fAnimationPos:=AnimationPos+1;
  end;
end;
end;
Функция не доделана, уже мозги кипят, выручайте!
Каждый день узнаю новое...

Последний раз редактировалось Anton911; 13.02.2012 в 16:27.
Anton911 вне форума Ответить с цитированием
Старый 13.02.2012, 17:27   #2
Wicort
Форумчанин
 
Аватар для Wicort
 
Регистрация: 04.08.2009
Сообщений: 684
По умолчанию

Видимо, плохо искали. Всё разобрано в теме Как Вы относитесь к созданию игр на Delphi? в самом начале.

UPD
Например, вот
Еслия Вам помог, не поленитесь нажать на весы и оставить отзыв. Это не займет много времени, но даст понять, что я старался не зря =)
Мой ник зарегистрирован, а твой?

Последний раз редактировалось Wicort; 13.02.2012 в 17:31.
Wicort вне форума Ответить с цитированием
Старый 14.02.2012, 18:25   #3
Anton911
Форумчанин
 
Аватар для Anton911
 
Регистрация: 23.08.2011
Сообщений: 171
По умолчанию

Я примерно так и представлял, но у меня было 32 фигуры и каждая будет анимироваться, в этом загвоздка была, щас вроде разобрался, написал функцию которая будет анимировать все фигуры.

Код:
procedure AnimateAllFigures();
var i:integer;
p:string;
begin
for i := 1 to 32 do
if (aFigure[i].Played) {and (aFigure[i].fAnimationId<>0)} then
begin
case aFigure[i].fPovorot of
U: p:='UP';
D: p:='Down';
L: p:='Left';
R: p:='Right';
UL: p:='UPLeft';
UR: p:='UPRight';
DL: p:='DownLeft';
DR: p:='DownRight';
end;
aFigure[i].fArenaPos.Picture.FreeImage; // Не придераться
case aFigure[i].fAnimationId of //Проверяем ид анимации, 0 нету анимации, 1 анимация движения
0:
  begin
    aFigure[i].fArenaPos.Picture.LoadFromFile(DATA_MODELS_WHITE+inttostr(aFigure[1].fType)+'\'+STAND+p+'.bmp');
  end;
1:
  begin
    aFigure[i].fArenaPos.Picture.LoadFromFile(DATA_MODELS_WHITE+inttostr(aFigure[i].fType)+'\'
                                              +ANIMATION_WALK+p+'\'+inttostr(aFigure[i].fAnimationPos)+'.bmp');
    aFigure[i].fAnimationPos:=aFigure[i].fAnimationPos+1;
    if( aFigure[i].fAnimationPos> 24 )then  //В анимации движения 24 кадра
    begin
    aFigure[i].fAnimationId:=aFigure[i].fAnimationId; //Анимация повторяется вновь
    aFigure[i].fAnimationPos:=1; //Устанавливаем позицию анимации на первый кадр
    end;
  end;
end;
aFigure[i].fArenaPos.Picture.Transparent:=true;
aFigure[i].fArenaPos.Picture.TransparentColor:=clLime;
end;
end;
Фигуры анимируются если в условии "and (aFigure[i].fAnimationId<>0)" разкоментирована а если закоментирована (как сейчас), то почемуто не анимируются, даже те у которых fAnimationId=1, не вижу в чем ошибка. Хелп.
fAnimationId=0 Фигура стоит на месте
fAnimationId=1 Анимация движения
Каждый день узнаю новое...

Последний раз редактировалось Beermonza; 14.02.2012 в 19:16.
Anton911 вне форума Ответить с цитированием
Старый 14.02.2012, 19:16   #4
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Вот эти сообщения посмотри:

Модель аркадного уровня
Пример от Kostia
Анимация
Про модель юнитов 1
Про модель юнитов 2
Про модель юнитов 3
Простой пример основы РПГ
Про загрузку и использование текстур и проходимости...
Подробно о заполнении банка текстур...
Пример аркады с прыжком
Создание меню/интерфейса
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 14.02.2012, 21:18   #5
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,876
По умолчанию

Цикл for не содержит операторных скобок, и получается в него только попадает один if, в котором case, остальные команды уже не попадают, но в них четко видно, что они принадлежат циклу (ибо обращаетесь к фигуре в массиве по индексу - итератору i). Об этом дельфи должна была выдать Warning , советую прислушиваться к ней и устранять по возможности ворнинги.

Поддерживаю Beermonza - проштудируйте тему для новичков, и особенно советую обратить внимание на банк текстур, ибо грузить с диска на каждой итерации 32 картинки это перебор.
phomm вне форума Ответить с цитированием
Старый 15.02.2012, 00:23   #6
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Anton911, настоятельно рекомендую всегда прописывать начало и конец тела любого оператора, т.е. Begin и end, даже если одна строчка исполнительного кода внутри. Причем есть нюансы с регистром символов (я программирую более 10 лет и для быстрого поиска ошибок и читаемости кода разработал целую систему). Вот пример кода со всеми тонкостями, на основе твоего исходника:

Код:
// ===================================================================
// Процедура проигрывания анимации
// ===================================================================
procedure PlayAnimation(FigureId, AnimationId, AnimationPos: Integer);
begin

  Case aFigure[FigureId].fType of
  Peshka: Begin
            aFigure[FigureId].fAnimationPos := AnimationPos + 1;
          end;
  end;

end;
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его

Последний раз редактировалось Beermonza; 15.02.2012 в 00:28.
Beermonza вне форума Ответить с цитированием
Старый 15.02.2012, 07:04   #7
Anton911
Форумчанин
 
Аватар для Anton911
 
Регистрация: 23.08.2011
Сообщений: 171
По умолчанию

У меня фигура может быть повернута в разные стороны.
Тоесть для одной анимации существует несколько направлений(Лево, право, верх, низ и т.д.), как быть тогда? Создавать для каждой стороны по 24 кадра?
Поворачивать картинку тоже, чтото не выходит.
Посоветуйте чтонибудь.
Каждый день узнаю новое...
Anton911 вне форума Ответить с цитированием
Старый 15.02.2012, 15:43   #8
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Цитата:
Сообщение от Anton911 Посмотреть сообщение
У меня фигура может быть повернута в разные стороны.
Тоесть для одной анимации существует несколько направлений(Лево, право, верх, низ и т.д.), как быть тогда? Создавать для каждой стороны по 24 кадра?
Поворачивать картинку тоже, чтото не выходит.
Посоветуйте чтонибудь.
Простой пример основы РПГ

В примере 4 направления, картинку найдешь в каталогах. Вот таких картинок можно выполнить массу, это будут типы анимации. Делай хоть 100 кадров, просто сборная текстура анимации на один тип состояния будет длиннее.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
курсовая Отдел кадров Seva2011 БД в Delphi 33 28.01.2014 16:50
отдел кадров gergert_andrei Фриланс 6 29.11.2011 16:23
построение кадров Woodyy Паскаль, Turbo Pascal, PascalABC.NET 1 14.06.2010 11:59
Построение отдельных кадров Woodyy Паскаль, Turbo Pascal, PascalABC.NET 0 25.05.2010 15:29
Что за текучка кадров? =) JTG Свободное общение 1 15.09.2008 11:53