![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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.