Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

DELPHIX


Vin_Ghost ©   (2003-05-13 23:10:00) 

Привет! У меня вопрос:
Например, у меня есть класс:

type
THero = class(TImageSprite)
protected
procedure DoCollision(Sprite: TSprite; var Done: Boolean); override;
procedure DoMove(MoveCount: Integer); override;
public
Constructor Create(AParent: TSprite); Override;
end;

и я создал с помощью этого конструктора с десяток спрайтов:

constructor THero.Create(AParent: TSprite);
Begin
inherited Create(AParent);
Image := form1.DXImageList1.Items.Find("Asterix");
Width := Image.Width;
Height := Image.Height;
X := random(100); ( 200)

Привет! У меня вопрос:
Например, у меня есть класс:

type
THero = class(TImageSprite)
protected
procedure DoCollision(Sprite: TSprite; var Done: Boolean); override;
procedure DoMove(MoveCount: Integer); override;
public
Constructor Create(AParent: TSprite); Override;
end;

и я создал с помощью этого конструктора с десяток спрайтов:

constructor THero.Create(AParent: TSprite);
Begin
inherited Create(AParent);
Image := form1.DXImageList1.Items.Find("Asterix");
Width := Image.Width;
Height := Image.Height;
X := random(100);
Y := random(200);
Z := 2;
AnimStart := 0;
AnimCount := 6;
AnimLooped := True;
AnimSpeed := 15/1000;
End;

Как мне потом эти спрайты различать и обращаться к ним програмно? Ведь должны же эти экземпляры как различаться?
срочно нужно


Владимир Васильев   (2003-05-14 11:23:00) [1]

Всё очень просто:

constructor THero.Create(AParent: TSprite);


Если родителем (AParent) будет SpriteEngine.Engine то он и будет
следить за всеми своими спрайтами, например:
SpriteEngine.Dead - удалить недействительные объекты;
SpriteEngine.Move - переместить
SpriteEngine.Draw - draw Sprites


............
For i:=1 to HeroCountMax do
With THero.Create(MainForm.SpriteEngine.Engine) do
..................

тогда, например :


procedure Attack;
Var
i : integer;
begin
// need optimiztion
With MainForm do
begin
For i:=0 to SpriteEngine.Engine.AllCount-1 do
if (SpriteEngine.Engine.Items[i] is THero)
( SpriteEngine.Engine.Items[i])

Всё очень просто:

constructor THero.Create(AParent: TSprite);


Если родителем (AParent) будет SpriteEngine.Engine то он и будет
следить за всеми своими спрайтами, например:
SpriteEngine.Dead - удалить недействительные объекты;
SpriteEngine.Move - переместить
SpriteEngine.Draw - draw Sprites


............
For i:=1 to HeroCountMax do
With THero.Create(MainForm.SpriteEngine.Engine) do
..................

тогда, например :


procedure Attack;
Var
i : integer;
begin
// need optimiztion
With MainForm do
begin
For i:=0 to SpriteEngine.Engine.AllCount-1 do
if (SpriteEngine.Engine.Items[i] is THero)
then THero(SpriteEngine.Engine.Items[i]).doAttack;
end;
end;




Михаил Бесчетнов   (2003-05-14 02:48:00) [2]

Можно (и, вероятно, нужно) создать коллекцию на основе TList, куда добавлять все создаваемые объекты. Каждому объекту даешь имя (или код какой нибудь). Потом у коллекции делаешь функцию типа "function GetByName(Value: string): THero;", которая бы искала в базе объект с нужным именем. После этого перестаешь думать и по необходимости обращаещся - "HeroBase.GetByName("Termite")"


Плохой человек   (2003-05-13 23:55:00) [3]

Добавь там свойство Name.


Наверх

Титульная страница Поиск, карта сайта Написать письмо