Главная страница
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.051 c
4-1097587901
ShproTT
2004-10-12 17:31
2004.11.28
Частота монитора


4-1097823638
AngelFire
2004-10-15 11:00
2004.11.28
Получение IP-адреса машины и имени залогинившегося пользователя


3-1099376206
Dr. Andrey
2004-11-02 09:16
2004.11.28
Указатель на Record при добавлении узлов в TreeView


1-1100084607
Артем К.
2004-11-10 14:03
2004.11.28
Цветные ячейки в TDataBaseGrid?


1-1100180949
Rule
2004-11-11 16:49
2004.11.28
Ссылки классов или переменные классов, как быть ?