Какой объект в TList сейчас обрабатывается?
Экземпляры класса заносятся в Obj:TList. Потом при помощи ф-ии UpdateEntities (Obj) происходит перебор всех объектов в списке с выполнением метода класса Update(). Возникла проблема как можно узнать какой объек из списка сейчас обрабатыется прямо из метода Update()? Нехотелось бы что бы при переборе передавать обрабатываемый объект в метод Update() (те Update(Obj)), тк придется переписывать все методы Update у всех классов.
|
Re: Какой объект в TList сейчас обрабатывается?
Ну так элемент, что перебирается то и есть текущий.
|
Re: Какой объект в TList сейчас обрабатывается?
код дай
|
В том то и дело что просто для того что бы получить обрабатывемый элемент мне нужно пердать его методу Update(), но для этого мне придется дописывать все Update() - а мне это наф ненадо.
Есть ф-ия которая обрабатывает все списки: Function UpdateEntities( list:TList ) For Local entity:TEntity=EachIn list entity.Update Next End Function Есть класс TEntity c абстрактным методом Update(), у него есть потомок класс TBuilding в котором и расписан метод Update(). Во время выполнения ф-ии UpdateEntities(list:TList) выполняется метод Update() класса TBuilding. Те из самого метода TBuilding.Update() я немогу узнать какой объект из списка выполняется. В этом то и вся проблема, нехотелось бы в TBuilding.Update() делать еще один перебор For .. Next по списку объектов TBuilding. Все это нужно для организации "выбора объекта" на который кликнули. У класса Tbuilding есть поле IsSelected. В методе Update() происходит проверка: Если кликнули на объекте, то IsSelected = true. А теперь надо сделать все IsSelected = false у других объектов. Делать для этого еще один перебор кокраз нехочеться. Идея была в том, что бы занести выбраный объект в поле "Global SelectedBuilding" и проверить если "текущий объект" <> "SelectedBuilding", то Selected = false. При создании экземпляра класса используется: Local Building:TBuilding=New TBuilding Если занести Building при этом, например, в поле Obj этого же экземпляра класса будет ли он указывать именно на себя? По логике: когда заносим созданый экземпляр класса в TList(например List.AddLast(Building), потом при переборе и изменении TList всеравно идет указание на созданый объект, НО вот будут ли те ссылки в TList и в поле класса Obj одинаковыми, что бы можно было использовать a=b? |
Re: Какой объект в TList сейчас обрабатывается?
мда... нифига не понял, надеюсь, что хть ты сам понимаешь что делаешь. Если хочешь, чтобы тебе помогли, учись правильно и четко формулировать вопросы.
Короче, попробуй так: сделай метод get() Код:
type TBuilding |
Re: Какой объект в TList сейчас обрабатывается?
Сделал немного подругому:
Type TBuilding ' ссылка на себя, значение присваиватся при создании экземпляра класса Field TowerName 'Текущий выбраный объект Global TowerS = Null 'Выбран ли объект IsSelected = false Method Update() If Click() then Not(IsSelected) If IsSelected then TowerS = TowerName else TowerS = Null endif If TowerName <> TTower.TowerS Then Selected=0 end method() Ну а дальше Draw() уже рисует согласно разным параметрам. Тк нет смысла каждый раз выполнять "вернуть себя", решил просто добавить еще одно поле в класс, но за метод спасиб, думаю что понадобиться. |
Re: Какой объект в TList сейчас обрабатывается?
не знаю нафиг такой гемор, я для редактора зделал
отдельный тип SelectedObjects и всю работу с ними типа повернуть выделеные обьекты, переместить выделеные обьекты и тд :) удобно и практично ps. что мешает в Building.Update писать так ? if something then Selected = true LastSelected.Selected = false LastSelected = self end if |
Re: Какой объект в TList сейчас обрабатывается?
Гы, можно и так.
|
Часовой пояс GMT +4, время: 04:16. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot