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

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

Как сделать цепь дыма за рокетой? [Delphi, Windows]


SwitchBlade ©   (2004-07-28 12:38:00) 

Здравствуйте, скажите плз как сделать цепь дыма за рокетой, т.е. это понятно, но возникает проблема, вот код:

procedure TRocket.DoMove(MoveCount: Integer);
var
i: integer;
begin
inherited DoMove(MoveCount);

//Здесь создается дым
inc(SmokeDelay);
if SmokeDelay > 10 then begin
Smoke := TSmoke.Create(MainForm.DXSpriteEngine.Engine);
with TSmoke(Smoke) do
begin
Image := MainForm.ImageList.Items.Find('smoke');
Width := Image.Width;
Height := Image.Height;
X := Rocket.X-8;
Y := Rocket.Y-8;
Z := 4;
AnimSpeed := 100/3000;
Animlooped := false;
AnimStart := 0;
AnimCount := 16;
PixelCheck := false;
Collisioned := false;
SmokeDelay:=0;
end;
end;
X := X + sin256(Angle) * (rocketStartSpeed/1000)*MoveCount;
Y := Y - cos256(Angle) * (rocketStartSpeed/1000)*MoveCount;
Collision;
end;


Таким образом создается цепь дыма за рокетой, но все хорошо, пока одна рокета. Как только за ней выстреливает вторая, то дым начинает образовываться уже за ней, а первая рокета летит без дыма. Каким образом сделать так, чтоб цепь дыма следовала за каждой выпущенной рокетой?


SwitchBlade   (2004-07-28 16:01:00) [1]

И опять огромное спасибо, все 100 % идет


Megabyte-CeerCop   (2004-07-28 12:53:00) [2]

Помоему, кагда летят две ракеты, дым тоже создается в двух экземплярах, но оба с координатами последней ракеты.
Строки
> X := Rocket.X-8;
> Y := Rocket.Y-8;

адресуются к последней созданой ракете независимо от того в каком спрайте это вызывается.
Попробуй перед созданием спрайта дыма (до With) поместить координаты во временные переменные, и при присвоении параметров дыму взять координаты из этих переменных ане из Rocket.X.

procedure TRocket.DoMove(MoveCount: Integer);
var
i,   Xt,Yt: integer;
begin
inherited DoMove(MoveCount);

//Здесь создается дым
inc(SmokeDelay);
if SmokeDelay > 10 then begin

Xt := X-8;
Yt := Y-8;


Smoke := TSmoke.Create(MainForm.DXSpriteEngine.Engine);
with TSmoke(Smoke) do
begin
Image := MainForm.ImageList.Items.Find('smoke');
Width := Image.Width;
Height := Image.Height;

X := Xt;
Y := Yt;

Z := 4;
AnimSpeed := 100/3000;
Animlooped := false;
AnimStart := 0;
AnimCount := 16;
PixelCheck := false;
Collisioned := false;
SmokeDelay:=0;
end;
end;
X := X + sin256(Angle) * (rocketStartSpeed/1000)*MoveCount;
Y := Y - cos256(Angle) * (rocketStartSpeed/1000)*MoveCount;
Collision;
end;


Попробуй так


Наверх

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