Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

DelphiX- Спрайты [Delphi]


Dmitrich ©   (2003-11-19 02:50:00) 

Здраствуйте, уважаемые мастера Delphi. При создании игрушки я столкнулся с небольшой проблемкой. Как сделать так чтобы анимированый спрайт прокрутился один раз, после чего уничтожился? Например взрыв.
С уважением Dmitrich.


Dmitrich   (2003-11-25 00:06:00) [1]

Всем огромное мега спасибо!!! Я наконец-то разобрался и дела пошли просто отлично!


Ландграф Павел   (2003-11-20 20:16:00) [2]

>Хочу задать ещё один очень глупый! Если AnimPos текущий кадр, то почему у него тип Double?
А ты думаешь каким образом они сделали скорость анимации???
Когда кадр будет ровно 2, выведется изображение два, а от 1 до 1.99 будет отрисовываться кадр 1...
Здорово правда?


MeF88   (2003-11-20 18:34:00) [3]


> Но оно не работает? Что делаю не так?

Полный код в студию!


Dmitrich   (2003-11-20 17:52:00) [4]

Хочу задать ещё один очень глупый! Если AnimPos текущий кадр, то почему у него тип Double?

Ну в общем нужно сделать так, чтобы после нажатия пробела создавался объект (Tvzriv), прокручивался до конца и уничтожался!

procedure TDev.DoMove(MoveCount: Integer);
...
begin
...
if isButton1 in Form1.DXInput1.States then begin  //(пробел)
 ...
 Vzriv:=TVzriv.Create(form1.DXSpriteEngine1.Engine);
 ...
end;
 if Vzriv.AnimPos=Vzriv.AnimCount then dead;
...
end;

Я полагаю так! Но оно не работает? Что делаю не так?


MeF88   (2003-11-20 17:31:00) [5]


> "Ну и дуб же ты Василий Иваныч"(С)

И златая цепь на дубе том... Пушкин (C)

> Вы не совсем поняли вопрос! Я имею в виду как понять что
> прорисовался последний кадр? AnimPos=6, чтоли если картинок
> 6?

if AnimPos=AnimCount then Dead;
где AnimPos - текущий кадр, а AnimCount - количество кадров всего. Вообще я не помню есть ли в DelphiX AnimCount - давно его не юзал...


Ландграф Павел   (2003-11-20 16:25:00) [6]

"Ну и дуб же ты Василий Иваныч"(С)
Тебе же ясно написали, читай AnimPos!!!


Dmitrich   (2003-11-20 15:52:00) [7]

Вы не совсем поняли вопрос! Я имею в виду как понять что прорисовался последний кадр? AnimPos=6, чтоли если картинок 6?


MeF88   (2003-11-20 14:31:00) [8]


> Здраствуйте, уважаемые мастера Delphi. При создании игрушки
> я столкнулся с небольшой проблемкой. Как сделать так чтобы
> анимированый спрайт прокрутился один раз, после чего уничтожился?
> Например взрыв.
> С уважением Dmitrich.

Ох да не пишите вы на DelphiX. Хотя бы PowerDraw. В идеале DirectX или OpenGL в чистом виде. А вообще нужно Dead.


Darthman   (2003-11-20 14:26:00) [9]

"Клиент всегда мертв" (С)

Когда спрайт прорисует последнюю картинку, сделай ему Free() или Destroy().


Thor   (2003-11-20 13:49:00) [10]

Dead.


Dmitrich   (2003-11-20 05:16:00) [11]

Значит есть такой класс, как (взрыв):

type
 TVzriv=class(TImageSprite)
 protected
   constructor Create(AParent: TSprite); override;
   destructor Destroy; override;
end;

Есть ещё такой игрок как:

 Tdev=class(TImageSprite)
   Angle:integer;
 protected
   procedure DoCollision(Sprite: TSprite; var Done: Boolean); override;
   procedure DoMove(MoveCount: Integer); override;
   procedure DoDraw; override;
   constructor Create(AParent: TSprite); override;
   destructor Destroy; override; // ïðè ñìåðòè
 end;

При нажатии пробел происходит следуещее...

procedure TDev.DoMove(MoveCount: Integer);
...
begin
...
if isButton1 in Form1.DXInput1.States then begin  //(пробел)
  {Чё здесь писать когда спрайт Tvzriv прорисует последнюю   картинку????}
end;
...
end;


Thor   (2003-11-19 22:28:00) [12]


> Dmitrich   (19.11.03 17:35) [2]

чтобы понять какой кадр анимации отрисовывается, если я не ошибаюсь, нужно смотреть свойство картинки AnimPos.


Dmitrich   (2003-11-19 17:35:00) [13]

Я создал отдельный класс, но как в коде понять, что анимация закончилась (В спрайте 6- картинок)??? Есть ли функция которая содержит номер прорисованной картинки в DXImageList при анимации. Причём в DXImageList.items у меня одна строчка которая содержит все 6 картинок.


Tanker   (2003-11-19 13:08:00) [14]

Самый простой способ - рисуешь спрайт который в конце взрывается, а затем уничтожаешь в конце анимации...
Еще проще - отдельный класс взрыв, с трансперентом накладывается на пропорциональный взрыву объект и в конце анимации уничтожается...


Наверх

Титульная страница Поиск, карта сайта Написать письмо