Форум: "Игры";
Текущий архив: 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