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

Вниз

DelphiXМножество самостоятельных и идентичных друг другу объектов   Найти похожие ветки 

 
Pandemonium   (2003-07-07 09:45) [0]

Народ, у меня такая проблема. Есть один готовый объект, или класс,-картинка, способная двигаться по определенному закону, сталкиваться и т.д. Нужно каждое определенное время порождать(<=50) такой же, независимый с первым объект, самостоятельно живущий. Если просто создавать объект(в OnTimer), после первого, то он появляется в спрайте вместе с первым(слеплены!) и движется вместе с ним в кадре, притом что направление движения вообщем объктов случайно (4 направления, через Case of), Collision же одинаков. Как это сделать без описания, допустим 50 объектов, а пользуясь только одним?


 
Михаил Макушев   (2003-07-07 11:06) [1]

Пожалуй что никак. А по вашему как хранить информацию о свойствах (скажем положении, но в принципе и других) множества порожденных объектов, в одной и той же ячейке памяти (которая есть суть - переменная)?
Можете, допустим, создать динамический массив на требуемые X и Y и добавлять в него нужные координаты объектов по мере необходимости.


 
3d[Power] ©   (2003-07-07 18:48) [2]

1) Создавай объект в рандомной позиции, при этом проверяй расстояние до близлежащих объектов, если больше N, значит они слипаться не будут => создаем.

2) Если тебе надо чтобы они спавнились всегда из одной точки, то спавни с интервалом времени, и при спавне проверяй расстояние до близ объектов... если больше N ...


 
HoloCaust   (2003-07-08 01:17) [3]

Pandemonium: У меня была такая проблема и вот каким способом я её решил (с учетом того, что писал я на DelphiX) :

-создал класс нужных мне объектов

//Класс чего-то там
TClassSSS = class(TImageSprite)

-далее в var прописал:
ClassSSS: TClassSSS;
ClassSSSX: array[0..99] of Integer; //положение объектов по X
ClassSSSY: array[0..99] of Integer; //положение объектов по Y

-у меня была процедура столкновения рокеты с чем-нибудь, а далее ёё уничтожение и создание на этом месте взрыва

//Столкновение
procedure TRocket.DoCollision(Sprite: TSprite; var Done: Boolean);
var
n : integer;
begin
n:=1;
if Sprite is TMap then begin
ClassSSSX[1+n]:=trunc(X);
ClassSSSY[1+n]:=trunc(Y);
Self.Dead;

ClassSSS:= TClassSSS.Create(DXForm.DXSpriteEngine.Engine);
with TClassSSS(ClassSSS) do
begin
DXForm.DXWaveList.Items.Find("explo").Play(false);
Image := DXForm.DXImageList.Items.Find("explo");
Width := Image.Width;
Height := Image.Height;
X := ClassSSSX[1+n]; //Координата X
Y := ClassSSSY[1+n]; //Координата Y
Z := 99;
Collisioned := true
end;
end;

end;

-странно немного, но работает на все 100 или даже 200


 
Sorvi- Golova   (2003-07-09 15:35) [4]

Разрешается использование тегов форматирования текста:
жирный наклонный подчеркнутый,
а для выделения текста программ, используйте ...
и не забывайте закрывать теги! :)



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

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

Наверх




Память: 0.48 MB
Время: 0.032 c
14-72895
race1
2004-01-03 08:38
2004.01.23
bat string


1-72707
GooG-NTS
2004-01-11 01:58
2004.01.23
Вспывающие сообщения в Win 2k/XP


7-72960
RoLeX
2003-11-08 17:11
2004.01.23
Как узнать свободное место на диске C: ???


7-72965
Ngobo
2003-10-28 16:15
2004.01.23
Как из Дельфи можно отключить Primary IDE Channel


1-72777
Прохор
2004-01-13 12:24
2004.01.23
D7 PopupMenu и ХР