![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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]Самый простой способ - рисуешь спрайт который в конце взрывается, а затем уничтожаешь в конце анимации...
Еще проще - отдельный класс взрыв, с трансперентом накладывается на пропорциональный взрыву объект и в конце анимации уничтожается...