Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.05.16;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.51 MB
Время: 0.038 c
1-1083497810
XSteel
2004-05-02 15:36
2004.05.16
Динамические массивы в Delphi 1 и структуры > 65кил


1-1082973506
Daman
2004-04-26 13:58
2004.05.16
Как получить тег любого объекта кликом на него


3-1082103521
RavenD
2004-04-16 12:18
2004.05.16
Чем вылечить DB-файлы?


3-1082370020
}|{yk
2004-04-19 14:20
2004.05.16
А с таким запросом как?


3-1082441582
Demiurg
2004-04-20 10:13
2004.05.16
Копирование таблицы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский