Показать сообщение отдельно
  #50  
Старый 22.05.2013, 13:25
Аватар для Царь
Царь Царь вне форума
Новичок
 
Регистрация: 13.05.2013
Сообщения: 52
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Ххорошо... Вот, как бы делаю по Вашему, Страдалецъ, примеру, старательно пытаясь вникнуть.
  1. У меня уже был тип врагов в отведенном юните, я его просто дополнил Вашим примером:


    Код:
    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;


  2. Далее, я прописываю 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;
  3. Теперь применяю Ваш код в основном юните с помощью процедуры 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.
    При инициализации мои монстры так же привязываются к одной и той же координатной точке. Небо, что я делаю не так? Массив есть, в каждый пункт массива вписываю создание и ничего не выходит. А, и еще монстры не получают заданную координату начиная с угла экрана. То есть, с нуля. Я сделал что-то не так?
Ответить с цитированием