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

Вниз

Как сделать цепь дыма за рокетой?   Найти похожие ветки 

 
SwitchBlade ©   (2004-07-28 12:38) [0]

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

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;


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


 
Megabyte-CeerCop ©   (2004-07-28 12:53) [1]

Помоему, кагда летят две ракеты, дым тоже создается в двух экземплярах, но оба с координатами последней ракеты.
Строки
> 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;


Попробуй так


 
SwitchBlade ©   (2004-07-28 16:01) [2]

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



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

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

Наверх




Память: 0.47 MB
Время: 0.034 c
4-1097682747
Hmm
2004-10-13 19:52
2004.11.28
isql.exe или как выполнить команду в консольном приложении... ?


4-1097760226
Дядя
2004-10-14 17:23
2004.11.28
Срочно - надо заблокировать клаву и мышь, Но


1-1100583961
leonidus
2004-11-16 08:46
2004.11.28
Можно ли написать программу HTML>CHM ?


6-1095681156
Senator
2004-09-20 15:52
2004.11.28
TServerSocket


14-1099938913
Piter
2004-11-08 21:35
2004.11.28
Поделитесь опытом удаленной работы