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

Вниз

Как вызвать метод класса для всех объектов этого класса   Найти похожие ветки 

 
bond   (2004-04-28 15:56) [0]

количество объектов не известно


 
Игорь Шевченко ©   (2004-04-28 16:07) [1]

Никак


 
evvcom ©   (2004-04-28 16:14) [2]

Когда создаешь объекты этого класса, то сохраняй их где-нибудь в динамическом массиве или списке, а потом в цикле вызывай. Какие проблемы?


 
bond   (2004-04-28 16:14) [3]

Игорь Шевченко ©  (28.04.04 16:07) [1]
>Никак

А вот в DelphiX, например обьявляется класс

 TPlayerSprite = class(TImageSprite)
 Private
   lngpolet:integer;
   oldlngpolet:integer;
   procedure Hit;
 protected
   procedure DoMove(MoveCount: Integer); override;
   procedure DoCollision(Sprite: TSprite; var Done: Boolean); override;
 end;

Затем создаётся после, например, нажатие пробела сколь угодное кол-во обьектов этого класса, в таймере пишется

 DXSpriteEngine1.Move(LagCount);

и всё, через определённый интервал времени все объекты класса TPlayerSprite выполняют все методы, описанные в этом классе


 
Digitman ©   (2004-04-28 16:15) [4]


> Как вызвать метод класса для всех объектов этого класса


как "оттанцевать" (метод класса) всех девушек (объект класса) на дискотеке, причем - одновременно ?


 
Digitman ©   (2004-04-28 16:17) [5]


> А вот в DelphiX, например


а вот в нашей деревне, например, теленок опоросился.. после "нажатия пробела" ..


 
bond   (2004-04-28 16:18) [6]

Digitman ©  (28.04.04 16:15) [4]

Это не дискотека, это объектно-орентированное программирование!


 
Ega23 ©   (2004-04-28 16:21) [7]

как "оттанцевать" (метод класса) всех девушек (объект класса) на дискотеке, причем - одновременно ?

причём количество девушек (объектов) заранее не известно.


 
Ega23 ©   (2004-04-28 16:27) [8]

А если серьёзно, то DXSpriteEngine1.Move - исходник метода, пожалуйста. И inherited Move тоже.


 
bond   (2004-04-28 16:32) [9]

Ega23 ©  (28.04.04 16:27) [8]

procedure TCustomDXSpriteEngine.Move(MoveCount: Integer);
begin
 FEngine.Move(MoveCount);
end;

деляю CTRL+клик на move, открывается следующее

procedure TSprite.Move(MoveCount: Integer);
var
 i: Integer;
begin
 if FMoved then
 begin
   DoMove(MoveCount);// Эта пустая процедура, веё теле нифига
   for i:=0 to Count-1 do
     Items[i].Move(MoveCount);
 end;
end;


 
bond   (2004-04-28 16:35) [10]

FMoved - зто какая то логическая переменная


 
Ega23 ©   (2004-04-28 16:39) [11]

for i:=0 to Count-1 do
    Items[i].Move(MoveCount);

Ключевое место! А теперь смотрим что такое TSprite.Items и Должно быть что-то вроде TSprite.Add(...) или TSprite.AddItem(...)
И всё становится понятно!


 
WebErr ©   (2004-04-28 16:40) [12]

В DirectX как раз всё сохраняется в Array"ях, включая спрайты, вершины, объекты (графические 3D-шки) и т.п. Естественно, что все спрайты массива будут делать всё, что вашей душе угодно после несложного цикла for.


 
bond   (2004-04-28 16:41) [13]

Ну ладно, всем спасибо. Вообще-то я догадывался, что нужно помещать все объекты в список или дин массив, но думал, мож какой поумней метод есть!


 
vl_chel ©   (2004-04-28 16:44) [14]

Ответ возможен при использовании объектов СОМ+, там есть фабрика классов, она может знать о бо всех,
либо использовать в модуле (где описан класс) что то, что обеспечит знание о бо всех объектах созданных


 
Digitman ©   (2004-04-28 16:44) [15]


> bond   (28.04.04 16:18) [6]
> Это не дискотека, это объектно-орентированное программирование!


а какая разница ? ты способен окучить ОДНОВРЕМЕННО всех девушек ? хоть на дискотеке хоть еще где-то ? Нет ! ты делаешь это черное дело последовательно, методически, в цикле от первой до последней девушки в списке "окучиваемых" ! Или ты такой уникум, что мультипен..лен от рождения ?)

то же самое и в

for i:=0 to Count-1 do //вот он, цикл ! по всем девушкам, отовым к "окучиванию" !
    Items[i].Move(MoveCount);


 
bond   (2004-04-28 16:45) [16]

WebErr ©  (28.04.04 16:40) [12]

Вот только все объекты создаются вот так

TMyClass.create;

а не так

MyVar:=TMyClass.create;

Тоесть, как я понимаю, объект создаётся и предастовляется самому себе и своим методам, и управлять им уже невозможно


 
Юрий Зотов ©   (2004-04-28 16:45) [17]

> bond (28.04.04 15:56)

См. ответ [2]. Можно добавлять объекты в список вручную и обходить его тоже вручную. Можно делать это автоматически, написав ровно тот же самый код в методах самого класса и вызывая эти методы. Но другого пути нет, и Ваш Move все равно делает все то же самое. Потому что чудес не бывает.


 
bond   (2004-04-28 16:45) [18]

bond  (28.04.04 16:45) [16]

Я правильно понимаю?


 
Digitman ©   (2004-04-28 16:46) [19]


> vl_chel ©   (28.04.04 16:44) [14]
> Ответ возможен


ответ невозможен ... никоим образом ... в принципе невозможен !

тот же самый цикл в том или ином виде скрыт в СОМ-объекте


 
Digitman ©   (2004-04-28 16:59) [20]


> bond   (28.04.04 16:45) [18]
>
> Я правильно понимаю?


правильно


 
vl_chel ©   (2004-04-28 17:01) [21]

ЮЮ Digitman ©   (28.04.04 16:46) [19]

> vl_chel ©   (28.04.04 16:44) [14]
> Ответ возможен
ответ невозможен ... никоим образом ... в принципе невозможен !

тот же самый цикл в том или ином виде скрыт в СОМ-объекте

>> Технологию COMа можно сэмулировать, делал такую штуку еще до того как узнал о СОМе
конструктор класса может знать о глобальном списке в котором хранятся все ссылки на созданные объекты НуИ думаем о реализации


 
vl_chel ©   (2004-04-28 17:05) [22]

COM технология не рассматривает циклов !!!
Там есть механизм подсчета ссылок на клас и при нулевом количестве сама вызывает деструктор!!!


 
Digitman ©   (2004-04-28 17:19) [23]


> vl_chel ©   (28.04.04 17:05) [22]


> COM технология не рассматривает циклов !!!


ты о чем ? я - о внутренней реализации алгоритма объекта .. СОМ он или не СОМ


 
Skier ©   (2004-04-28 17:34) [24]

>bond   (28.04.04 15:56)  
Например :
-при создании (конструктор) объект заносит ссылку на себя в список объектов
-при уничтожении (деструктор) объект удаляет ссылку на себя из списка объектов
-при вызове определённого метода (в теле метода) бежим по списку и вызываем этот метод для всех объектов в списке


 
Игорь Шевченко ©   (2004-04-28 17:45) [25]


> -при создании (конструктор) объект заносит ссылку на себя
> в список объектов
> -при уничтожении (деструктор) объект удаляет ссылку на себя
> из списка объектов
> -при вызове определённого метода (в теле метода) бежим по
> списку и вызываем этот метод для всех объектов в списке


Область применения для такого решения можешь показать ?


 
vl_chel ©   (2004-04-28 17:48) [26]

Я не буду говорить о внутренней реолизации объектов основанных на коме, не разбирался и пока не собираюсь, но нужное действие делается именно как я сказал.

Но естественно сразу (в одно и тоже время вызвать нельзя (или мы имеем дело с многопроцесорной системой)) метод вызывается по списку (естествено в цикле)


 
Skier ©   (2004-04-28 17:50) [27]

>Игорь Шевченко ©   (28.04.04 17:45) [25]
Об "области применения" должен думать автор вопроса.
Я отвечал на вопрос "как..."


 
WebErr ©   (2004-04-28 17:53) [28]

В общем-то посты должны были оборваться сразу после [2]



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

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

Наверх




Память: 0.53 MB
Время: 0.061 c
3-1082619189
Ale
2004-04-22 11:33
2004.05.16
Подготовка зпароса


14-1082957280
Anka
2004-04-26 09:28
2004.05.16
Про женский пол...


4-1080568055
Boris_S
2004-03-29 17:47
2004.05.16
как вызвать процесс и дождаться окончания его выполнения?


7-1081073322
NV-VETAL
2004-04-04 14:08
2004.05.16
DCOM. Как зарегистрировать клиента с помощью реестра?


6-1079800088
13-th Warrior
2004-03-20 19:28
2004.05.16
Как отправить файл по сети?