Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2004.11.28;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.051 c
14-1099077051
Cerberus
2004-10-29 23:10
2004.11.28
Скушно


4-1097862186
ser_ega
2004-10-15 21:43
2004.11.28
Twain


1-1100392990
ZZS
2004-11-14 03:43
2004.11.28
Как правильно завершить программу?


1-1100591290
cvg
2004-11-16 10:48
2004.11.28
Как положить TLabel поверх TChart???


6-1095462159
Comp
2004-09-18 03:02
2004.11.28
Трафик





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский