Главная страница
    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.034 c
14-1100084773
Holy
2004-11-10 14:06
2004.11.28
О нечистой силе, компах и бубне...


14-1100007294
}|{yk
2004-11-09 16:34
2004.11.28
Блохин называет состав сборной на матч с Турцией


14-1099323646
OSokin
2004-11-01 18:40
2004.11.28
Оцените новый сайт (личный)


1-1100141359
Rat
2004-11-11 05:49
2004.11.28
как "открыть с помощью..."?


1-1100592621
ПЛОВ
2004-11-16 11:10
2004.11.28
Процедура Read читает только 8 байт...





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский