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

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

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.03.2013, 20:26   #1
FomAW
Пользователь
 
Регистрация: 14.03.2013
Сообщений: 30
По умолчанию Спрайтовая анимация

Нужно сделать движение человека по экрану. Использовал функцию BitBlt, но после движения изображения по экрану остается его след т.е. оно не стирается, а накладывается друг на друга. Как это и справить?
Код:
var
  Form1: TForm1;
  BMH:TBitMap;
  kadrx,kadry:byte;
  x,y:integer;
  time:integer;
implementation

{$R *.dfm}


procedure TForm1.FormCreate(Sender: TObject);
begin
  BMH:=TBitMap.Create;
  BMH.LoadFromFile('C:\Users\Алексей\Documents\RAD Studio\Projects\Гоблин\anim_4_2.bmp');
  kadrx:=0;
  kadry:=0;
  x:=0;
  y:=0;
  time:=65;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  BMH.Free;
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var i:Byte;
begin
  if Key=39 then
  for i:=0 to 3 do
  begin
    inc(kadry);
    if kadry>3 then begin inc(kadrx); kadry:=0; end;
    if kadrx>1 then kadrx:=0;
    BitBlt(Form1.Canvas.Handle,x,y,96,134,
         BMH.Canvas.Handle,kadrx*130,kadry*134,SRCCopy);
    inc(x,13);
    if x>clientWidth then
    begin
      x:=0;
      inc(y,134);
    end;
    if y>2*134 then y:=0;
    sleep(Time);
  end;
end;
Вложения
Тип файла: zip Новая папка.zip (2.85 Мб, 21 просмотров)

Последний раз редактировалось FomAW; 29.03.2013 в 20:45.
FomAW вне форума Ответить с цитированием
Старый 30.03.2013, 12:27   #2
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Общий подход - не рисовать фрагмент нового изображения поверх старого, а формировать новое изображение целиком, начиная с фона.
Вы, очевидно, забываете восстановить фон.

Вероятно, когда Вы справитесь с текущей проблемой, у Вас появится другая - мерцание изображения. Для избавления от нее нужна двойная буферизация.

PS. И еще - sleep в неконсольном приложении - дурной тон. Вместо него нужно пользоваться таймером.
s-andriano вне форума Ответить с цитированием
Старый 30.03.2013, 12:57   #3
FomAW
Пользователь
 
Регистрация: 14.03.2013
Сообщений: 30
По умолчанию

Цитата:
Сообщение от s-andriano Посмотреть сообщение
формировать новое изображение целиком, начиная с фона.
Не могли бы вы подробнее рассказать об этом?
FomAW вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
спрайтовая анимация (Исправьте мне мои ошибки) Рамиль1 Помощь студентам 1 28.04.2012 14:04
Анимация A-IX-2 Общие вопросы Delphi 9 10.03.2011 16:30
Спрайтовая анимация Anabella Помощь студентам 0 21.06.2010 10:46