Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.02;
Скачать: CL | DM;

Вниз

DelphiX- Спрайты   Найти похожие ветки 

 
Dmitrich   (2003-11-19 02:50) [0]

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


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

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


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

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


 
Thor ©   (2003-11-19 22:28) [3]


> Dmitrich   (19.11.03 17:35) [2]

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


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

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

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-20 13:49) [5]

Dead.


 
Darthman ©   (2003-11-20 14:26) [6]

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

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


 
MeF88 ©   (2003-11-20 14:31) [7]


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

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


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

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


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

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


 
MeF88 ©   (2003-11-20 17:31) [10]


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

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

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

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


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

Хочу задать ещё один очень глупый! Если 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 18:34) [12]


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

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


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

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


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

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



Страницы: 1 вся ветка

Текущий архив: 2004.05.02;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.028 c
3-1081008085
YurikGl
2004-04-03 20:01
2004.05.02
varchar в IB


6-1078395276
pai
2004-03-04 13:14
2004.05.02
Indy, IdTCPClient.writebuffer


7-1078415756
Роман
2004-03-04 18:55
2004.05.02
Com-порт операции с DCB.


3-1080829113
kaif
2004-04-01 18:18
2004.05.02
Уникальность с UPPER


8-1076051433
Onward
2004-02-06 10:10
2004.05.02
SetPixel??????????