Ххорошо... Вот, как бы делаю по Вашему, Страдалецъ, примеру, старательно пытаясь вникнуть.
- У меня уже был тип врагов в отведенном юните, я его просто дополнил Вашим примером:
Код:
type
TEnemyState = (msLive, msDead);
TEnemy = Class(TImageSprite)
Location:Tpoint;
State:TEnemyState;
protected
procedure DoMove(MoveCount:Integer); override;
procedure DoCollision(Sprite: TSprite; var Done: Boolean); override;
procedure SpriteCreate(Name:String; Anis:integer; Anic:integer); //процедура для упрощенного создания анимации монстров
public
Constructor Create(AParent:TSprite); override;
Destructor Destroy; override;
end;
- Далее, я прописываю SpriteCreate, конструктор и деструктор, DoMove и DoCollision. Опишу конструктор:
Код:
Constructor TEnemy.Create(AParent:TSprite);
begin
inherited Create(AParent);
image:=GameForm.MonsterList.Items.Find('SpiderStandRight');
Width:=Image.Width;
Height:=Image.Height;
PixelCheck := True;
AnimCount :=Image.PatternCount;
AnimLooped := True;
AnimSpeed := 100 / 1000;
x:=Location.X; //присваиваю координаты
y:=Location.Y;
Collision;
end;
- Теперь применяю Ваш код в основном юните с помощью процедуры NewEnemy, взяв для примера небольшое количество и без прописывания, что будет с монстром при msDead:
Код:
Procedure TGameForm.NewEnemy;
var
i:integer;
MasM: array of TEnemy;
begin
for i:=1 to 5 do
begin
SetLength(MasM,Length(MasM)+1);
MasM[High(MasM)]:=TEnemy.Create(DXSpriteEng.Engine);
MasM[High(MasM)].Location.x:=Random(300);
MasM[High(MasM)].Location.Y:=200; //стандартная "поверхность"
MasM[High(MasM)].State:= msLive;
end;
end;
Процедуру вызываю пока что только onFormCreate.
При инициализации мои монстры так же привязываются к одной и той же координатной точке. Небо, что я делаю не так? Массив есть, в каждый пункт массива вписываю создание и ничего не выходит. А, и еще монстры не получают заданную координату начиная с угла экрана. То есть, с нуля. Я сделал что-то не так?